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

Я надеюсь, что это немного яснее.

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос