在一个社交网络项目中,我希望得到朋友的随机朋友,以便像Facebook那样向用户推荐。建议用户的数量是动态的。但我们的表格字段如下:
inviter_id
,friend_id
,status
因此user id
可以在inviter_id
或friend_id
中,status 2
表示朋友请求已被接受且他们当前是朋友。
任何人都可以帮我解决一个不错的解决方案吗?
我已经拥有了一个,当它变得越来越大时,它肯定会减慢网站的速度。
提前致谢。
答案 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