假设有一个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朋友的所有朋友...... (#1朋友的朋友)
我尝试了这个查询:
SELECT friend_id FROM `friends` WHERE user_id = 1
并将它们放入变量$ IN。
SELECT friend_id FROM `friends` WHERE user_id IN ( '$IN' )
但是这没有按预期工作。
EDITED
如果用户#1有100个朋友,而他的每个朋友都有100个朋友。 所以它应该返回9900 ID给我。但它返回99个ID。
任何帮助。感谢。
答案 0 :(得分:2)
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
答案 1 :(得分:1)
$ IN应该以逗号分隔,并且您的查询不应该在$ IN周围'
,因为它是一组整数
SELECT friend_id FROM `friends` WHERE user_id IN ($IN)
答案 2 :(得分:1)
您可以将SELECT
移至IN
SELECT friend_id FROM `friends` WHERE user_id IN
(SELECT friend_id FROM `friends` WHERE user_id = 1)
但是有很多行,JOIN
可能是更好的解决方案,正如Aquillo所建议的那样。