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.