Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/01/2012, 14:14
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: Consultas a 2 tablas

Hola gamau6:

No termino de entender correctamente cuál es la condición que se tiene que cumplir para que el registro aparezca en la consulta final. si entendí correctamente el tercer registro que pones de salida NO DEBE APARECER, ya que el estado del registro 3 de la tabla amigos aparece como 0.

Creo que lo que quieres obtener sería todos los amigos de DANIEL que tengan un estado 1 en la tabla amigos, si estoy en lo correcto podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT U.* FROM usuario U WHERE EXISTS
  2.     -> (SELECT id_amigos FROM amigos A WHERE A.id_envia = 1
  3.     -> AND A.id_recibe = U.id_usuario AND A.estado = 1)
  4.     -> OR EXISTS
  5.     -> (SELECT id_amigos FROM amigos A WHERE A.id_recibe = 1
  6.     -> AND A.id_envia = U.id_usuario AND A.estado = 1);
  7. +------------+--------+
  8. | id_usuario | nombre |
  9. +------------+--------+
  10. |          2 | paola  |
  11. |          3 | pedro  |
  12. +------------+--------+
  13. 2 rows in set (0.02 sec)

Ahora bien, si necesitas también los campos id_recibe y id_envia, tendrías que hacerlo un poco diferente, utilizando JOIN's en lugar de EXISTS:

Código MySQL:
Ver original
  1. mysql> SELECT U.id_usuario, A1.id_envia, A1.id_recibe, U.nombre
  2.     -> FROM usuario U INNER JOIN
  3.     -> (SELECT * FROM amigos A WHERE A.id_envia = 1 AND estado = 1) A1
  4.     -> ON A1.id_recibe = U.id_usuario
  5.     -> UNION
  6.     -> SELECT U.id_usuario, A1.id_envia, A1.id_recibe, U.nombre
  7.     -> FROM usuario U INNER JOIN
  8.     -> (SELECT * FROM amigos A WHERE A.id_recibe = 1 AND estado = 1) A1 ON
  9.     -> A1.id_envia = U.id_usuario;
  10. +------------+----------+-----------+--------+
  11. | id_usuario | id_envia | id_recibe | nombre |
  12. +------------+----------+-----------+--------+
  13. |          2 |        1 |         2 | paola  |
  14. |          3 |        3 |         1 | pedro  |
  15. +------------+----------+-----------+--------+
  16. 2 rows in set (0.03 sec)


Dale un vistazo a ver si esto es lo que necesitas, y si continuas con problemas trata nuevamente de explicar el filtro que quieres aplicar a tu información.

Saludos
Leo.