假设有一个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/

10-11 22:16
查看更多