Zapytanie MySQL, aby znaleźć przyjaciół i liczbę wspólnych znajomych

Przejrzałem pytania, ale nie mogę znaleźć niczego, co robi dokładnie to, czego potrzebuję i sam nie potrafię tego zrobić.

Mam 2 tabele, tabelę użytkownika i tabelę linków do znajomych. Tabela użytkowników to tabela wszystkich moich użytkowników:

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

Tabela linków do moich znajomych pokazuje wszystkie relacje między użytkownikami, na przykład:

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

Uwaga: w kolumnie statusu oznacza zatwierdzony, może też być r (żądanie) i d (odrzucone).

Chcę zapytać, czy jeśli użytkownik przeprowadzi wyszukiwanie, wyświetli listę użytkowników, z którymi nie są jeszcze przyjaciółmi i ilu wspólnych znajomych ma z sobą użytkownik.

Udało mi się uzyskać zapytanie dla wszystkich użytkowników, którzy obecnie nie są z nimi przyjaciółmi. Więc jeśli użytkownik przeprowadzający wyszukiwanie miał identyfikator użytkownika 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'

Jak mam zliczyć liczbę wspólnych znajomych dla każdego zwróconego użytkownika?

EDYTOWAĆ:

Tak samo jak edycja, ponieważ nie sądzę, żebym był szczególnie jasny z moim pytaniem.

Zapytanie, które mam obecnie powyżej, wygeneruje następujący zestaw wyników:

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

Są to użytkownicy pasujący do blogów nazwisk, które nie są obecnie przyjaciółmi z blogami joe (identyfikator użytkownika 1).

Następnie chcę mieć ilu wzajemnych przyjaciół, których każdy z tych użytkowników ma z użytkownikiem przeprowadzającym wyszukiwanie, aby zwrócone wyniki wyglądały następująco:

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

Każdy z tych zwróconych użytkowników ma 1 wspólnego przyjaciela, jak joe bloggs (identyfikator użytkownika 1) jest zaprzyjaźniony z blogami john, a john bloggs jest przyjacielem obu zwróconych użytkowników.

Mam nadzieję, że to jest trochę bardziej jasne.

Dzięki.

questionAnswers(3)

yourAnswerToTheQuestion