嗨,即时通讯,试图找出我如何能得到共同的朋友
我目前在考虑这个问题时遇到问题。
我有一个名为“用户”的表,这是它的外观
id | name ----------- 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8 Dude
我有一张叫做“友谊”的桌子,这就是它的样子
user_a | user_b ---------------- 4 1 7 5 8 1 2 4 2 1 5 2 1 6 1 7
user_a向user_b发送一个成为朋友的请求,并且… BAM有朋友。现在,如果我是用户2,并且我转到用户1s的朋友列表,我想看看我们有什么共同点。什么是正确的SQL做到这一点?
假设用户1与用户7不可能两次成为好友(这意味着不能与user_a = 1, user_b=7和排成一行user_a = 7, user_b = 1)。
user_a = 1, user_b=7
user_a = 7, user_b = 1
SELECT IF(user_a = 1 OR user_a = 2, user_b, user_a) friend FROM friendship WHERE (user_a = 1 OR user_a = 2) OR (user_b = 1 OR user_b = 2) GROUP BY 1 HAVING COUNT(*) > 1