Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/08/2012, 10:03
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: query amistad

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.