Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/04/2012, 19:32
LaGan
 
Fecha de Ingreso: abril-2012
Mensajes: 3
Antigüedad: 12 años
Puntos: 0
Es posible escribir este UNION mejor?

Hola a todos!

Les quería preguntar si es posible escribir mejor esta sentencia, que básicamente lo que hace (o debería de hacer) es mostrar los nombres de la gente que son amigos de un individuo..

Ejemplo:

TABLA USERS
id | name

1 | Lucas
2 | Mery
3 | John
4 | Raul
5 | Paul
6 | Mike

TABLA CONTACTOS
id | id_usuario1 | id_usuario2

1 | 2 | 1
2 | 3 | 1
3 | 1 | 4
4 | 4 | 3
5 | 2 | 5

El usuario 1 es el que siempre manda la petición de amistad y el usuario 2 el que la acepta.

Si yo soy el usuario 1 con id en la tabla USER 1 (Lucas) y quiero que en mi perfil se vean a todos mis amigos, es correcto utilizar estas peticiones?

SELECT users.name FROM users, contactos WHERE contactos.id_usuario1 = '1' AND users.id = contactos.id_usuario2
UNION ALL
SELECT users.name FROM users, contactos WHERE contactos.id_usuario2 = '1' AND users.id = contactos.id_usuario1;

Lo que hago es primero mirar en la columna "id_usuario2" por todos los amigos del usuario 1 (Lucas) y luego junto esos resultados con los resultados obtenidos de la segunda parte que viene dada por los amigos encontrados en "id_usuario1". Para eso utilizo UNION ALL.

RESULTADO:
Raul
Mery
John

La pregunta es: ¿Hay manera de mejorar esa sentencia u optimizarla?
¿Hay un sistema mejor para identificar a los amigos que la que he puesto arriba?


Muchas gracias por vuestra ayuda!

Saludos