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

Obterner datos de 3 tablas

Estas en el tema de Obterner datos de 3 tablas en el foro de Mysql en Foros del Web. Hola a todos, estoy tratando de hacer una consulta que coja valores de 3 tablas relacionadas y no consigo obtener el resultado que quiero. Tengo ...
  #1 (permalink)  
Antiguo 24/07/2010, 11:37
 
Fecha de Ingreso: diciembre-2005
Mensajes: 92
Antigüedad: 18 años, 4 meses
Puntos: 0
Obterner datos de 3 tablas

Hola a todos, estoy tratando de hacer una consulta que coja valores de 3 tablas relacionadas y no consigo obtener el resultado que quiero.

Tengo la siguiente base de datos:



El campo id de la tabla elementos esta relacionado con con los campos id de las tablas imagenes y parrafos. Lo que quiero es hacer una consulta por un determinado id y obtener los datos de las 3 tablas (elementos,imagenes,parrafos) que contengan ese id.
Si lo realizo por separado obtengo 1 resultado en la tabla elementos, 2 resultados en la tabla imagenes y 3 en la de parrafos.

tabla elementos :
SELECT id, descriptor, year FROM elementos WHERE id='4'



tabla imagenes :
SELECT id,descriptor,idimagen,ruta, posicion FROM imagenes WHERE id='4'



tabla parrafos :
SELECT idparrafos,posicion,texto FROM parrafos WHERE id='4'



El problema viene cuando intento agrupar las 3 consultas en una, ya que yo en la consulta quiero obtener de resultado los 6 resultados de las imagenes anteriores s pero las recibo repetidas y con los campos mezclados.

Esta es la consulta :

SELECT e.id,e.descriptor,e.iduser,i.idimagen,i.ruta,i.pos icion,p.idparrafos,p.posicion,p.texto FROM elementos e JOIN imagenes i ON e.id = i.id JOIN parrafos p ON e.id = p.id WHERE e.id ='4'

y esta es la respuesta:



Hay campos como texto que es solo esta en los parrafos y ruta que solo esta en las imagenes y el resultado que yo espero seria las 3 filas de los parrafos, las 2 de las imagenes y una de elementos y en los campos como ruta apareciera NULL si la fila es de parrafo y ya ruta si es una imagen, y en el campo texto apareciera NULL si es una imagen y el texto si es un parrafo.

Este seria el resultado que quiero:

-----------------id------texto-------------ruta
----------------------------------------------------------
elemento----4------NULL-----------NULL
imagen1------4-----NULL-----------ruta
imagen2------4-----NULL-----------ruta
parrafo1-------4-----texto------------NULL
parrafo2-------4-----texto------------NULL
parrafo3------4------texto------------NULL

Espero haberme explicado bien, llevo probando dos dias, he hecho pruebas con INNER JOIN, LEFT OUTER JOIN, subconsultas y siempre recibo el mismo resultado, no se si tendre mal las relaciones o algun otro problema.

Sal2
  #2 (permalink)  
Antiguo 24/07/2010, 18:07
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Obterner datos de 3 tablas

prueba asi:

Código SQL:
Ver original
  1. SELECT e.id, e.descriptor, i.idimagen, i.descriptor, p.idparrafos, p.descriptor
  2. FROM elementos e, imagenes e, parrafos p
  3. WHERE e.id = i.id AND e.id = p.id AND id=4
  4. GROUP BY id

avisas, si puedes manda las querys para crear las tablas y ayudarte. saludos
  #3 (permalink)  
Antiguo 25/07/2010, 09:51
 
Fecha de Ingreso: diciembre-2005
Mensajes: 92
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Obterner datos de 3 tablas

Hola, las querys para crear la tabla no las tengo porque las creo a traves de phpmyadmin.

Hice como me dijistes la siguiente consulta:

Código:
SELECT e.id, e.descriptor, i.idimagen, i.descriptor, p.idparrafos, p.descriptor
FROM elementos e, imagenes i, parrafos p
WHERE e.id = i.id
AND e.id = p.id
GROUP BY id
y obtuve el siguiente resultado:



Yo sigo probando cosas y todo me llega al mismo camino, en lugar de tratar las imagenes y los parrafos cada unos independientes mezcla las fila y las duplica.

No se si estara mal creada la base de datos o no damos con la consulta adecuada.
  #4 (permalink)  
Antiguo 25/07/2010, 19:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Obterner datos de 3 tablas

Cita:
Hola, las querys para crear la tabla no las tengo porque las creo a traves de phpmyadmin.
Eso es fácil: Las puedes obtener haciendo un backup, o bien usando:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombredetabla;

En cuanto a la consulta, el problema basico es que la coma realiza en este caso lo que se denomina producto cartesiano, lo que en realidad está haciendo es un cruce entre los campos que llevan el mismo nombre... Y en estos casos hay más de uno en cada tabla (al menos ID y DESCRIPCION), por lo que está haciendo un verdadero enredo.
Para que ande bien no debes usar una coma o el JOIN simplemente (es el sinónimo) sino hacer un INNER JOIN bien estructurado.:

Código MySQL:
Ver original
  1.    E.id,
  2.    E.descriptor,
  3.    E.iduser,
  4.    I.idimagen,
  5.    I.ruta,
  6.    I.posicion,
  7.    P.idparrafos,
  8.    P.posicion,
  9.    P.texto
  10. FROM elementos E
  11.    INNER JOIN imagenes I ON (E.id = P.id AND E.descriptor = I.descriptor)
  12.    INNER JOIN parrafos P ON (E.id = P.id AND E.descriptor = P.descriptor)
  13. WHERE id='4'

Esta sentencia, así, sólo podrá darte registros duplicados si el mismo par de claves se encuentra duplicado en alguna de las dos tablas dependientes. En caso contrario sólo puede devolver un sólo registro...

El tema central es que el WHERE es un pésimo modo de resolver las relaciones de las tablas, porque para ese momento el producto cartesiano ya existe.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 26/07/2010, 10:00
 
Fecha de Ingreso: diciembre-2008
Ubicación: sullana, Piura
Mensajes: 106
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Obterner datos de 3 tablas

Cita:
Iniciado por pepepercebe Ver Mensaje
Hola, las querys para crear la tabla no las tengo porque las creo a traves de phpmyadmin.

Hice como me dijistes la siguiente consulta:

Código:
SELECT e.id, e.descriptor, i.idimagen, i.descriptor, p.idparrafos, p.descriptor
FROM elementos e, imagenes i, parrafos p
WHERE e.id = i.id
AND e.id = p.id
GROUP BY id
y obtuve el siguiente resultado:



Yo sigo probando cosas y todo me llega al mismo camino, en lugar de tratar las imagenes y los parrafos cada unos independientes mezcla las fila y las duplica.

No se si estara mal creada la base de datos o no damos con la consulta adecuada.
pasa la query pa ayudarte mejor, como te dice gnzsoloyo es buena idea, si no exportala a un .sql y pegas el contenido aca...saludos

Etiquetas: 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 09:27.