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

Consultas a 2 tablas

Estas en el tema de Consultas a 2 tablas en el foro de Mysql en Foros del Web. Buenas.. Di vueltas por internet pero no encuentro una solucion... tengo 2 tablas una seria amigos id_amigos id_envia id_recibe estado 1 3 1 1 2 ...
  #1 (permalink)  
Antiguo 12/01/2012, 12:28
 
Fecha de Ingreso: octubre-2010
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 0
Consultas a 2 tablas

Buenas..

Di vueltas por internet pero no encuentro una solucion...

tengo 2 tablas

una seria amigos

id_amigos id_envia id_recibe estado
1 3 1 1
2 1 2 1
3 4 1 0

la otra seria usuario

id_usuario nombre
1 daniel
2 paola
3 pedro
4 juan

el resultado que estoy buscando seria que solo quede el id_envia o id_recibe 1 de la tabla amigos que se encuentre en estado 1

algo asi

id_amigos id_envia id_recibe nombre
1 3 1 pedro
2 1 2 paola
3 4 1 juan

Intente algo de esta forma pero esta mas que mal creo

Código MySQL:
Ver original
  1. SELECT * FROM amigos as a INNER JOIN usuario as u on a.id_envia = u.id_usuario XOR a.id_recibe = u.id_usuario where a.id_envia = 1 XOR a.id_recibe =1 and a.estado = 1

Alguien podria orientarme en hacer esta consulta?

gracias!
__________________
..
  #2 (permalink)  
Antiguo 12/01/2012, 14:00
Avatar de James_Garciap  
Fecha de Ingreso: agosto-2011
Ubicación: Colombia
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Consultas a 2 tablas

Hola gamau6,

No se si te he entendido al detalle, pero creo que lo que requieres es algo asi:

amigos
id_amigos id_envia id_recibe estado
1 3 1 1
2 2 2 1
3 4 1 0

usuarios
id_usuario nombre
1 daniel
2 paola
3 pedro
4 juan


Código:
SELECT amigos.id_amigos, amigos.id_envia, amigos.id_recibe, usuarios.nombre FROM amigos, usuarios WHERE usuario.id=amigos.id_envia;
El resultado final seria este:

id_amigos id_envia id_recibe nombre
1 3 1 pedro
2 2 2 paola
3 4 1 juan

En todo caso te recomendaria verificar si no te hace falta tener por ejemplo el nombre del amigo y separar los envios en otra tabla. Igual quedo atento a conocer si te ha servido.
  #3 (permalink)  
Antiguo 12/01/2012, 14:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #4 (permalink)  
Antiguo 13/01/2012, 04:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Consultas a 2 tablas

Muchisimas gracias por responder

leo el primer caso que planteas es el que necesito no sabia que podia hacer un exists aun me cuesta mucho hacer consultas a la base de datos estoy leyendo muchos tutoriales pero aun me cuesta (se aceptan materiales de estudio) jejejejeje

Gracias gracias!
Saludos!
__________________
..
  #5 (permalink)  
Antiguo 13/01/2012, 09:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consultas a 2 tablas

Hola de nuevo gamau6:

Me da gusto que te haya servido la consulta... y qué bueno que estás leyendo manuales, estoy seguro que pronto vas a dominar consultas más complejas, sólo es cuestión de práctica... te recomiendo estar al pendiente de este y otros foros, lee los aportes de los demás foristas para que veas los problemas a los que te puedes enfrentar y las soluciones que se plantean, día con día aprendes algo nuevo.

También dale un vistazo a la sección FAQ's de MySQL

http://www.forosdelweb.com/f86/faqs-mysql-489891/

Ahí hay muchos ejemplos y consultas cotidianas que te pueden servir mucho.

Saludos
Leo.
  #6 (permalink)  
Antiguo 13/01/2012, 12:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Consultas a 2 tablas

Gracias nuevamente leo, la verdad es la primera ves que posteo por el foro de mysql, por lo general ando por el de php!

Saludos y muchas gracias
__________________
..

Etiquetas: join, select, tabla, tablas
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 13:19.