MySQL Query для поиска друзей и количества общих друзей
Я просмотрел вопросы, но не могу найти ничего, что делает именно то, что мне нужно, и я не могу понять, как это сделать сам.
У меня есть 2 таблицы, таблица пользователей и таблица ссылок друзей. Таблица пользователей - это таблица всех моих пользователей:
+---------+------------+---------+---------------+
| user_id | first_name | surname | email |
+---------+------------+---------+---------------+
1 joe bloggs [email protected]
2 bill bloggs [email protected]
3 john bloggs [email protected]
4 karl bloggs [email protected]
Затем таблица ссылок моего друга показывает все отношения между пользователями, например:
+--------=+---------+-----------+--------+
| link_id | user_id | friend_id | status |
+---------+---------+-----------+--------+
1 1 3 a
2 3 1 a
3 4 3 a
4 3 4 a
5 2 3 a
6 3 2 a
Как примечание, a в столбце состояния означает одобрено, также могут быть r (запрос) и d (отклонено).
То, что я хочу сделать, - это запрос, по которому, если пользователь выполняет поиск, он возвращает список пользователей, с которыми он в данный момент еще не дружит, и сколько общих друзей у него есть.
Мне удалось получить запрос для всех пользователей, которые в настоящее время не дружат с ними. Так что, если пользователь, выполняющий поиск, имел идентификатор пользователя 1:
SELECT u.user_id,u.first_name,u.surname
FROM users u
LEFT JOIN friend_links fl
ON u.user_id = fl.user_id AND 1 IN (fl.friend_id)
WHERE fl.friend_id IS NULL
AND u.user_id != 1
AND surname LIKE 'bloggs'
Как тогда я могу подсчитать количество общих друзей для каждого возвращенного пользователя?
РЕДАКТИРОВАТЬ:
Так же, как редактирование, поскольку я не думаю, что я был особенно ясен с моим вопросом.
Запрос, который у меня сейчас есть, даст следующий набор результатов:
+---------+------------+---------+
| user_id | first_name | surname |
+---------+------------+---------+
2 bill bloggs
4 karl bloggs
Это пользователи, соответствующие фамилии bloggs, которые в настоящее время не дружат с joe bloggs (идентификатор пользователя 1).
Затем я хочу узнать, сколько общих друзей у каждого из этих пользователей с пользователем, выполняющим поиск, чтобы возвращаемые результаты выглядели так:
+---------+------------+---------+--------+
| user_id | first_name | surname | mutual |
+---------+------------+---------+--------+
2 bill bloggs 1
4 karl bloggs 1
У каждого из этих возвращенных пользователей есть 1 общий друг, поскольку joe bloggs (идентификатор пользователя 1) дружит с john bloggs, а john bloggs дружит с обоими возвращенными пользователями.
Я надеюсь, что это немного яснее.
Благодарю.