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 пункт, если вы заботитесь только об одном идентификаторе.

Другие вопросы по тегам