假设有一个friends
表。其中有10位用户。每个用户除了自己以外都是其他人的朋友。
像这样:
+---------+-----------+
| user_id | friend_id |
+---------+-----------+
| 1 | 2 |
+---------+-----------+
| 1 | 3 |
+---------+-----------+
| 1 | 4 |
+---------+-----------+
| 2 | 1 |
+---------+-----------+
| 2 | 3 |
+---------+-----------+
| 2 | 4 |
+---------+-----------+
| 3 | 1 |
+---------+-----------+
| 3 | 2 |
+---------+-----------+
| 3 | 4 |
+---------+-----------+ AND more ....
现在如何获得#1 Friends ...的所有Friends。 (#1的朋友的朋友)
我试过这个查询:
SELECT friend_id FROM `friends` WHERE user_id = 1
并将它们放在变量$ IN中。
SELECT friend_id FROM `friends` WHERE user_id IN ( '$IN' )
但这不能按预期工作。
已编辑
如果用户#1有100个朋友,并且他的每个朋友都有100个朋友。
因此它应该返回9900个ID给我。但它返回99个ID。
任何帮助。谢谢。
最佳答案
SELECT theirFriends.friend_id
FROM friends AS friendsOfOne
JOIN friends AS theirFriends ON friendsOfOne.friend_id = theirFriends.user_id
WHERE friendsOfOne.user_id = 1
如果您想将
1
(在本例中为1
)作为1
朋友的朋友而忽略,请尝试以下操作:SELECT theirFriends.friend_id
FROM friends AS friendsOfOne
JOIN friends AS theirFriends
ON friendsOfOne.friend_id = theirFriends.user_id
AND theirFriends.friend_id != friendsOfOne.user_id
WHERE friendsOfOne.user_id = 1
关于php - 查找子查询中的所有匹配项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21863029/