今天晚上我正试图弄清楚我的逻辑。我需要计算一个人与一个用户共享的朋友数量。 (相互朋友)
我有一个包含用户ID的表格以及朋友的用户ID,我的布局示例如下:
第一个结果意味着user1是用户2的朋友
[ID] - [FriendsID]
1-2
1-3
1-4
1-15
2-1
2-4
3-1
3-4
4-1
4-2
4-3
4-15
5-15
15-1
15-5
15-4
当我的PHP页面加载时,它将加载该用户的好友列表,例如User1。 这将返回(2,3,4.15)
的“FriendID”然后我需要弄清楚人们与用户有多少共同的朋友:1 例如,
1 is friends with 2,3,4
2 is friends with 1,4
3 is friends with 1,4,15
This would mean that “2” shares ONE mutual friend with 1
This would mean that “3” shares TWO mutual friend with 1
等等
我的输出需要是[FriendID] [Count]
朋友ID是朋友
计算与userID 1共有多少朋友
(手动写出的示例数据)
答案 0 :(得分:1)
您可以使用friendsid
列上的自我加入来执行此操作:
select t1.id, t2.id, count(*) as num_mutual_friends
from table t1 join
table t2
on t1.friendsid = t2.friendsid and t1.id <> t2.id
group by t1.id, t2.id;
我注意到你的数据是对称的,所以(1,2)在数据和(2,1)中。这意味着这个逻辑应该适合你。如果您只关心一个ID,则可以添加where
子句。