Consulta de MySQL para encontrar amigos y número de amigos en común.
He revisado las preguntas, pero no puedo encontrar nada que haga exactamente lo que necesito y no puedo descubrir cómo hacerlo yo mismo.
Tengo 2 tablas, una tabla de usuario y una tabla de enlace de amigo. La tabla de usuarios es una tabla de todos mis usuarios:
+---------+------------+---------+---------------+
| 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]
La tabla de enlaces de mi amigo muestra todas las relaciones entre los usuarios, por ejemplo:
+--------=+---------+-----------+--------+
| 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, la a en la columna de estado significa aprobado, también podría haber r (solicitud) yd (rechazado).
Lo que quiero hacer es tener una consulta en la que si un usuario realiza una búsqueda, volverá a tener una lista de los usuarios con los que todavía no son amigos y cuántos amigos en común tiene cada uno de ellos.
He logrado obtener una consulta para todos los usuarios que actualmente no son amigos de ellos. Entonces, si el usuario que realiza la búsqueda tiene el ID de usuario 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'
Entonces, ¿cómo tengo un recuento del número de amigos en común para cada usuario devuelto?
EDITAR:
Solo como una edición, ya que no creo que esté siendo particularmente claro con mi pregunta.
La consulta que tengo actualmente arriba producirá el siguiente conjunto de resultados:
+---------+------------+---------+
| user_id | first_name | surname |
+---------+------------+---------+
2 bill bloggs
4 karl bloggs
Esos son los usuarios que coinciden con el apellido bloggs que actualmente no son amigos de joe bloggs (usuario id 1).
Luego quiero saber cuántos amigos en común tiene cada uno de estos usuarios con el usuario que realiza la búsqueda para que los resultados obtenidos se vean así:
+---------+------------+---------+--------+
| user_id | first_name | surname | mutual |
+---------+------------+---------+--------+
2 bill bloggs 1
4 karl bloggs 1
Cada uno de estos usuarios devueltos tiene 1 amigo mutuo, ya que joe bloggs (id de usuario 1) es amigo de john bloggs y john bloggs es amigo de ambos usuarios devueltos.
Espero que esto sea un poco más claro.
Gracias.