Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Es posible escribir este UNION mejor?

Estas en el tema de Es posible escribir este UNION mejor? en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 24/04/2012, 19:32
 
Fecha de Ingreso: abril-2012
Mensajes: 3
Antigüedad: 12 años, 6 meses
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
  #2 (permalink)  
Antiguo 25/04/2012, 01:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Es posible escribir este UNION mejor?

Código MySQL:
Ver original
  1. SELECT users.name
  2. FROM users INNER JOIN contactos
  3.              ON users.id = contactos.id_usuario2
  4. WHERE contactos.id_usuario1 = '1'
  5. SELECT users.name
  6. FROM users INNER JOIN contactos
  7.              ON users.id = contactos.id_usuario1
  8. WHERE contactos.id_usuario2 = '1';
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/04/2012, 07:36
 
Fecha de Ingreso: abril-2012
Mensajes: 3
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Es posible escribir este UNION mejor?

Genial! Se agradece mucho que hayas respondido tan rápidamente!

Muchas gracias por la petición! No tuve en cuenta lo de INNER JOIN!
Me es de gran ayuda y funciona!!


Saludos!

Etiquetas: posible, select, tabla, union
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:16.