Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/08/2012, 04:25
Blashak
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: query amistad

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Blashak:

Este es un problema que hemos comentado muchas veces en el foro, depende mucho de cómo quieres presentar tu información. Una posible respuesta sería utilizando un doble INNER JOIN sobre la tabla de usuarios, utilizando un ALIAS, esto sería más o menos así, supongamos que tienes esta información:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM usuarios;
  2. +------+--------+
  3. | id   | nombre |
  4. +------+--------+
  5. |    1 | HUGO   |
  6. |    2 | PACO   |
  7. |    3 | LUIS   |
  8. |    4 | DONALD |
  9. +------+--------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM amigos;
  13. +------+------------+-------------+
  14. | id   | id_usuario | id_usuario2 |
  15. +------+------------+-------------+
  16. |    1 |          1 |           2 |
  17. |    2 |          1 |           3 |
  18. |    3 |          2 |           3 |
  19. |    4 |          4 |           1 |
  20. +------+------------+-------------+
  21. 4 rows in set (0.00 sec)

Supongamos que quieres obtener la lista de amigos del usuario 1 = HUGO, podrías hacerlo asi:

Código MySQL:
Ver original
  1. mysql> SELECT U1.*, U2.* FROM amigos A
  2.     -> INNER JOIN usuarios U1 ON U1.id = A.id_usuario
  3.     -> INNER JOIN usuarios U2 ON U2.id = A.id_usuario2
  4.     -> WHERE A.id_usuario = 1 OR A.id_usuario2 = 1;
  5. +------+--------+------+--------+
  6. | id   | nombre | id   | nombre |
  7. +------+--------+------+--------+
  8. |    4 | DONALD |    1 | HUGO   |
  9. |    1 | HUGO   |    2 | PACO   |
  10. |    1 | HUGO   |    3 | LUIS   |
  11. +------+--------+------+--------+
  12. 3 rows in set (0.00 sec)

Observa que en cada registro se repite la información del usuario HUGO, si sólo quieres listar la información de sus amigos, también lo puedes hacer con un UNION:

Código MySQL:
Ver original
  1. mysql> SELECT U.* FROM amigos A
  2.     -> INNER JOIN usuarios U ON U.id = A.id_usuario2
  3.     -> WHERE A.id_usuario = 1
  4.     -> UNION
  5.     -> SELECT U.* FROM amigos A
  6.     -> INNER JOIN usuarios U ON U.id = A.id_usuario
  7.     -> WHERE A.id_usuario2 = 1;
  8. +------+--------+
  9. | id   | nombre |
  10. +------+--------+
  11. |    2 | PACO   |
  12. |    3 | LUIS   |
  13. |    4 | DONALD |
  14. +------+--------+
  15. 3 rows in set (0.00 sec)

Creo que esto te debe servir. Dale un vistazo y nos comentas.

Saludos
Leo.
leonardo_josue,

muchas gracias, utilice la query de union.