我想找朋友的朋友。我得到了结果,但我不确定我的查询是否正确。我正在使用嵌套选择。
我的问题是:
查询是否正确?
如何使用join进行此查询?
这是我的朋友表
rowId userId friendId
----- ------ --------
1 1 4
2 1 2
3 2 10
4 3 6
.. .. ..
这就是我做朋友的方式:
SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId = $userID
这就是我收到朋友的朋友
SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId IN (SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId = $userID)
这是我为了结识朋友的朋友而做的事情
SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId IN (SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId IN (SELECT DISTINCT(friendId) FROM `user_friend`
WHERE userId = $userID))
答案 0 :(得分:2)
使用连接可能更容易......
SELECT DISTINCT u3.friendId FROM user_friend u1
JOIN user_friend u2 ON u1.friendId = u2.userId
JOIN user_friend u3 ON u2.friendId = u3.userId
WHERE u1.userId = $userId
答案 1 :(得分:1)
这似乎是连贯的。
你唯一想念的是你不应该返回$ userId,它可以是朋友朋友的朋友
编辑:我不知道你的数据库是否已经包含友谊。因此你还必须考虑如果A是B的朋友,那么B是A的朋友并测试它。
所以你必须在t2中使用可能的反转,如下面的
SELECT t1.userId FROM user_friend t1
JOIN user_friend t2 ON t1.friendId=t2.userId
JOIN user_friend t3 ON t2.friendId=t3.userId
WHERE t3.friendId=$userId AND t1.userId!=$userId
UNION
SELECT t1.userId FROM user_friend t1
JOIN user_friend t2 ON t1.friendId=t2.friendId
JOIN user_friend t3 ON t2.userId=t3.userId
WHERE t3.friendId=$userId AND t1.userId!=$userId;
此外,这包括朋友的朋友,而不是朋友的朋友。