在一个社交网络项目中,我想得到 friend 的随机 friend ,以便像 Facebook 那样向用户推荐。建议用户的数量是动态的。但是我们表的字段如下:
inviter_id
, friend_id
, status
因此user id
可以是inviter_id
或friend_id
,status 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