MySQL-Abfrage, um Freunde und die Anzahl der gemeinsamen Freunde zu finden

Ich habe die Fragen durchgesehen, aber ich kann nichts finden, das genau das tut, was ich brauche, und ich kann nicht herausfinden, wie ich es selbst machen soll.

Ich habe 2 Tabellen, eine User-Tabelle und eine Friend-Link-Tabelle. Die Benutzertabelle ist eine Tabelle aller meiner Benutzer:

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

In der Tabelle "Meine Freunde-Links" werden dann alle Beziehungen zwischen den Benutzern angezeigt. Beispiel:

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

Hinweis: Das a in der Statusspalte bedeutet "genehmigt". Es kann auch "r" (Anfrage) und "d" (abgelehnt) geben.

Was ich tun möchte, ist eine Abfrage, bei der ein Benutzer, wenn er eine Suche durchführt, eine Liste der Benutzer zurückgibt, mit denen er noch nicht befreundet ist, und wie viele gemeinsame Freunde jeder Benutzer mit sich hat.

Ich habe es geschafft, eine Abfrage für alle Benutzer zu erhalten, die derzeit nicht mit ihnen befreundet sind. Wenn der Benutzer, der die Suche durchführt, die Benutzer-ID 1 hat:

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'

Wie zähle ich dann die Anzahl der gemeinsamen Freunde für jeden zurückgegebenen Benutzer?

BEARBEITEN:

Gerade als Redakteur, da ich glaube, dass ich mit meiner Frage nicht besonders klar bin.

Die Abfrage, die ich derzeit oben habe, führt zu den folgenden Ergebnissen:

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

Dies sind die Benutzer, die mit den Familiennamen-Bloggs übereinstimmen, die derzeit nicht mit Joe-Bloggs befreundet sind (Benutzer-ID 1).

Dann möchte ich wissen, wie viele gemeinsame Freunde jeder dieser Benutzer mit dem Benutzer hat, der die Suche durchführt, damit die zurückgegebenen Ergebnisse wie folgt aussehen:

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

Jeder dieser zurückgegebenen Benutzer hat 1 gemeinsamen Freund, da Joe Bloggs (Benutzer-ID 1) mit John Bloggs befreundet ist und John Bloggs mit beiden zurückgegebenen Benutzern befreundet ist.

Ich hoffe das ist etwas klarer.

Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage