MySQL Query para encontrar amigos e número de amigos em comum

Examinei as perguntas, mas não consigo encontrar nada que faça exatamente o que eu preciso e não consigo descobrir como fazer isso sozinho.

Eu tenho 2 tabelas, uma tabela de usuários e uma tabela de links de amigos. A tabela de usuários é uma tabela de todos os meus usuários:

    +---------+------------+---------+---------------+
    | 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]

Minha tabela de links de amigos mostra todos os relacionamentos entre os usuários, por exemplo:

    +--------=+---------+-----------+--------+
    | 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

Como nota, o a na coluna de status significa aprovado, também pode haver r (request) e d (declinado).

O que eu quero fazer é ter uma consulta onde, se um usuário fizer uma pesquisa, ele trará de volta uma lista de usuários com os quais eles não são amigos no momento e quantos amigos em comum cada usuário tem com eles.

Consegui obter uma consulta para todos os usuários que atualmente não são amigos deles. Então, se o usuário que fez a pesquisa tiver o ID do usuário 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'

Como faço para contar o número de amigos em comum para cada usuário retornado?

EDITAR:

Apenas como uma edição como eu não acho que estou sendo particularmente claro com a minha pergunta.

A consulta que tenho atualmente acima produzirá o seguinte conjunto de resultados:

    +---------+------------+---------+
    | user_id | first_name | surname |
    +---------+------------+---------+
          2         bill      bloggs
          4         karl      bloggs

Esses são os usuários que combinam o sobrenome bloggs que atualmente não são amigos do joe bloggs (id do usuário 1).

Então, quero ter quantos amigos em comum cada um desses usuários tem com o usuário fazendo a pesquisa, para que os resultados retornados sejam semelhantes:

    +---------+------------+---------+--------+
    | user_id | first_name | surname | mutual |
    +---------+------------+---------+--------+
          2         bill      bloggs     1
          4         karl      bloggs     1

Cada um desses usuários retornados tem 1 amigo em comum, já que joe bloggs (id do usuário 1) é amigo de john bloggs e john bloggs é amigo de ambos os usuários retornados.

Espero que isso seja um pouco mais claro.

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion