php - 用这个表结构结交PHP和MYSQL的 friend

标签 php mysql

<分区>

在一个社交网络项目中,我想得到 friend 的随机 friend ,以便像 Facebook 那样向用户推荐。建议用户的数量是动态的。但是我们表的字段如下:

inviter_id, friend_id, status

因此user id可以是inviter_idfriend_idstatus 2表示好友请求被接受了,他们目前是 friend 。

谁能帮我想出一个好的解决方案?

我已经有了一个,随着网站变得越来越大,它肯定会减慢网站的速度。

提前致谢。

最佳答案

像这样的事情可能会做到。

SELECT DISTINCT id FROM (
    (SELECT t1.inviter_id as id FROM TableName t1 LEFT JOIN TableName t2 ON t1.friend_id = t2.inviter_id WHERE t1.status = 1 AND t2.status=1 AND t2.friend_id = UserId)
    UNION
    (SELECT t1.inviter_id as id FROM TableName t1 LEFT JOIN TableName t2 ON t1.friend_id = t2.friend_id WHERE t1.status = 1 AND t2.status=1 AND t2.inviter_id = UserId)
    UNION
    (SELECT t1.friend_id as id FROM TableName t1 LEFT JOIN TableName t2 ON t1.inviter_id = t2.inviter_id WHERE t1.status = 1 AND t2.status=1 AND t2.friend_id = UserId)
    UNION
    (SELECT t1.friend_id as id FROM TableName t1 LEFT JOIN TableName t2 ON t1.inviter_id = t2.friend_id WHERE t1.status = 1 AND t2.status=1 AND t2.inviter_id = UserId)
) as temp WHERE id != UserId AND NOT EXISTS (SELECT * FROM TableName WHERE (friend_id = id AND inviter_id=UserId) OR (inviter_id = id AND friend_id=UserId))

(将 TableName 替换为您的表名,将 UserId 替换为目标用户/变量)。

链接到我的测试/示例:http://sqlfiddle.com/#!2/ddbec/2

关于php - 用这个表结构结交PHP和MYSQL的 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23994802/

相关文章:

php - 为 Cassandra 安装 PHP 驱动程序

php - 了解在 OOP 中返回和传递自定义对象的目的

php - preg_replace 对专业人士来说很容易

php - 如何在我的 Web MVC 应用程序中实现访问控制列表?

mysql - SQL错误: ER_OPERAND_COLUMNS: Operand should contain 1 column(s)

javascript - 无法将获取的数据发送到我的 socket.io 流?

mysql - Flask-SQLAlchemy - 即时连接到多个数据库

PHP 脚本错误

iphone - 在 iOS 中使用 MySQL

mysql - 如何将一个表与另一个只有 1 个公共(public)值的表连接