consulta mySQL: selecciona usuarios que son amigos del usuario x

Digamos que tengo usuarios y que los usuarios pueden ser amigos. Tengo una tabla de usuarios y datos de usuario, y una tabla de amistades (identificación de conexión, identificación de ayuda de usuario, identificación de oferta de usuario).

¿Hay una sola consulta que pueda hacer en mySQL que capture a todos los usuarios de la tabla de usuarios que son amigos del usuario x? El hecho de que la identificación del usuario x pueda estar en la ranura a o en la ranura b en la tabla de amistades hace que esto sea más complicado de lo que puedo imaginar.

Editar para mayor claridad:

Necesito todos los datos de la tabla de usuarios para los amigos del usuario actual. Así que necesito los datos de usuario para el usuario b si el usuario actual es el usuario a en la tabla de amistades y viceversa. Quiero terminar con todos los datos de todos los amigos del usuario actual (de la tabla de usuarios) según la relación en la tabla de amistad.

preguntado el 12 de junio de 12 a las 20:06

2 Respuestas

Usar Violín SQL tu puedes hacer:

SELECT u.name as friends
FROM friendship AS f
JOIN users AS u ON 
  ((u.user_id = f.user_a_id AND f.user_b_id = @user_id)
  or (u.user_id = f.user_b_id AND f.user_a_id = @user_id))
where u.user_id is not null;

En este @user_id es el número de identificación del usuario para el que desea encontrar amigos y la salida son los nombres de los amigos.

Respondido el 12 de junio de 12 a las 21:06

Esto no funcionó para mí porque la unión izquierda hizo que devolviera todas las amistades independientemente de los usuarios y luego de los usuarios que coincidían. Cuando cambié la combinación izquierda a una combinación, funcionó. ¡Gracias! - Sherms

Me alegro de que haya funcionado. Lo cambiaré a una unión para cualquiera que vea esto en el futuro. Me alegro de poder ayudar. :) - Kyra

SELECT users.user_id FROM users, friends WHERE (users.user_id=friends.user_a_id AND friends.user_b_id=x) OR (users.user_id=friends.user_b_id AND friends.user_a_id=x);

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.