使用此表结构获取PHP和MYSQL中的朋友的朋友

时间:2014-06-02 12:41:07

标签: php mysql

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

inviter_idfriend_idstatus

因此user id可以在inviter_idfriend_id中,status 2表示朋友请求已被接受且他们当前是朋友。

任何人都可以帮我解决一个不错的解决方案吗?

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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))

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

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