MYSQL - тренируйся и считай общих друзей
Сегодня вечером у меня немного мозговитый пердеть, пытаясь выработать свою логику. Мне нужно посчитать, сколько друзей человек делит с одним пользователем. (Общие друзья)
У меня есть таблица с идентификатором пользователя, а также идентификатор пользователя друга, пример моего макета ниже:
Первый результат означает, что 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. Это вернет "FriendID" (2,3,4.15)
Затем мне нужно выяснить, сколько общих друзей у пользователя с пользователем: 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]
Идентификатор друга, являющийся другом
Посчитайте, сколько друзей общего с userID 1
(Пример данных выписан вручную)
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). Это означает, что эта логика должна работать на вас. Вы можете добавить where
пункт, если вы заботитесь только об одном идентификаторе.