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.