使用 MySql 查看我朋友的共同好友
Check Mutual Friends from my friend using MySql
第一个table:
user_id | name
1 Me
2 Jeremy
3 Bob
4 Kelvin
第二个table:
user_id | friend_id
1 2
1 3
2 1
2 3
3 1
3 2
所以朋友关系会是这样的:
user_id 1 - 2,3
user_id 2 - 1,3
user_id 3 - 1,2
如果说我是user_id 1 即'Me',那么我需要显示我所有的朋友和共同的朋友。类似于 facebook 'all friends' 功能,将显示共同的朋友。
输入将为“1”,输出将为
user_id2个return1个共同好友
user_id3个return1个共同好友
研究了很久,一直没有尝试出可行的代码。
使用自连接和聚合:
SELECT u.user_id, u.name,
COUNT(f3.friend_id) mutual_friends
FROM friends f1
INNER JOIN friends f2 ON f2.user_id = f1.friend_id
INNER JOIN users u ON u.user_id = f2.user_id
LEFT JOIN friends f3 ON f3.user_id = f1.user_id AND f3.friend_id = f2.friend_id
WHERE f1.user_id = ?
GROUP BY u.user_id, u.name;
将 ?
替换为您想要的用户 ID。
参见demo。
第一个table:
user_id | name
1 Me
2 Jeremy
3 Bob
4 Kelvin
第二个table:
user_id | friend_id
1 2
1 3
2 1
2 3
3 1
3 2
所以朋友关系会是这样的:
user_id 1 - 2,3
user_id 2 - 1,3
user_id 3 - 1,2
如果说我是user_id 1 即'Me',那么我需要显示我所有的朋友和共同的朋友。类似于 facebook 'all friends' 功能,将显示共同的朋友。
输入将为“1”,输出将为
user_id2个return1个共同好友
user_id3个return1个共同好友
研究了很久,一直没有尝试出可行的代码。
使用自连接和聚合:
SELECT u.user_id, u.name,
COUNT(f3.friend_id) mutual_friends
FROM friends f1
INNER JOIN friends f2 ON f2.user_id = f1.friend_id
INNER JOIN users u ON u.user_id = f2.user_id
LEFT JOIN friends f3 ON f3.user_id = f1.user_id AND f3.friend_id = f2.friend_id
WHERE f1.user_id = ?
GROUP BY u.user_id, u.name;
将 ?
替换为您想要的用户 ID。
参见demo。