Ver Mensaje Individual
  #8 (permalink)  
Antiguo 20/01/2012, 09:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Como usar el if dentro del select con inner join

Si entendí bien, lo que que quieres obtener es una lista de todos tus amigos, es decir, aquellos que te agregaron como amigo y aceptaste o aquellos a los que tú agregaste como amigo y aceptó correcto??? esto podrías plantearlo de dos formas diferentes, una con una unión, obteniendo cada sección por separado, y con la idea que estabas intentando, aunque un poco diferente. Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM usuarios;
  2. +-------------+----------------+
  3. | id_usuarios | usuario        |
  4. +-------------+----------------+
  5. |           3 | cyber_dark     |
  6. |           5 | leonardo_josue |
  7. |           6 | maria          |
  8. +-------------+----------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM amigos;
  12. +----------------+-------------+------------+
  13. | mi_id_usuarios | id_usuarios | aceptacion |
  14. +----------------+-------------+------------+
  15. |              3 |           5 | no         |
  16. |              5 |           3 | si         |
  17. |              3 |           6 | si         |
  18. +----------------+-------------+------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT u.* FROM usuarios u INNER JOIN
  22.     -> (SELECT mi_id_usuarios id FROM amigos
  23.     -> WHERE id_usuarios = 3 AND aceptacion = 'si'
  24.     -> UNION
  25.     -> SELECT id_usuarios id FROM amigos
  26.     -> WHERE mi_id_usuarios = 3 AND aceptacion = 'si') a
  27.     -> ON u.id_usuarios = a.id;
  28. +-------------+----------------+
  29. | id_usuarios | usuario        |
  30. +-------------+----------------+
  31. |           5 | leonardo_josue |
  32. |           6 | maria          |
  33. +-------------+----------------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> SELECT u.* FROM usuarios u INNER JOIN
  37.     -> (SELECT
  38.     -> IF(mi_id_usuarios = 3, id_usuarios, mi_id_usuarios) id
  39.     -> FROM amigos a
  40.     -> WHERE (mi_id_usuarios = 3 OR id_usuarios = 3) AND aceptacion = 'si') a
  41.     -> ON u.id_usuarios = a.id;
  42. +-------------+----------------+
  43. | id_usuarios | usuario        |
  44. +-------------+----------------+
  45. |           5 | leonardo_josue |
  46. |           6 | maria          |
  47. +-------------+----------------+
  48. 2 rows in set (0.00 sec)

Analiza las subconsultas en ambos casos, en el primero se hace uso de una UNION, mientras que en la segunda se hace uso de un IF, cualquier duda la comentas en el foro y tratamos de apoyarte.

Saludos
Leo.