我有两个简单的MySQL表:user&关系
关系表:
user_id int(10) unsigned NO PRI
friend_id int(10) unsigned NO PRI
(的一部分)用户表:
id int(10) unsigned NO PRI
username varchar(128) NO
我使用此查询选择朋友的朋友:
SELECT f2.friend_id, u.username
FROM relations f1
JOIN relations f2 ON f1.friend_id=f2.user_id
LEFT JOIN user u ON u.id = f2.friend_id
WHERE f2.friend_id NOT IN (select friend_id from relations where user_id=@user_id) AND f1.user_id= 2 AND f2.friend_id!= 2
对于单向关系,上面的查询是可以的(我认为),在单向关系中,我的"朋友"不必接受友谊。我知道它在某些情况下可以起作用,但我认为,对我来说,它应该是双向的。我知道,"IN"语句的效率不是很高。什么是获得朋友的最好(最快?最友好的mysql服务器?)方式,但只有那些接受了友谊的人(关系表中的两条记录:)
user_id:1 + friend_id:2 and user_id:2 + friend_id:1)?
您确定需要LEFT JOIN到用户表吗?这不是一个需要记录存在的外键吗?对于双向关系,您不只是在关系表中查找"交换"用户和朋友字段的记录吗?
SELECT f2.friend_id, u.username
FROM relations f1
JOIN relations f2
ON f1.friend_id = f2.user_id
AND f1.user = f2.friend_id
LEFT JOIN user u
ON u.id = f1.friend_id
WHERE f1.user_id @user_id;