Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/09/2010, 12:39
Avatar de cesarpunk
cesarpunk
 
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Consulta de imagenes

Hola a todos., estoy intentando realizar un query a 3 tablas PRODUCTO, IMAGEN y GALERIA ... éste último indica las imagenes que perteneces al producto.(tiene el id del producto y el id de la imagen)

La tabla IMAGEN tiene un campo "estado" que indica P si la imagen es la principal de la galería o que sale por default. Y N si es normal

Mi meta es hacer un listado de los productos además de mostrar esa imagen default.

Por ahora mi consulta es así:

Código:
SELECT p.producto_id, producto_nombre, i.producto_imagen_thumb, i.producto_imagen_estado
FROM producto p
LEFT JOIN (SELECT producto_id, producto_imagen_id FROM producto_galeria GROUP BY producto_id) AS g
ON p.producto_id=g.producto_id
LEFT JOIN (SELECT producto_imagen_id, producto_imagen_thumb, producto_imagen_estado FROM producto_imagen) AS i
ON g.producto_imagen_id=i.producto_imagen_id
ORDER BY producto_nombre ASC
De esta manera me muestra todos los productos pero me muestra la primera imagen insertada en la tabla.

y este es el resultado:

Código:
id     Producto     Imagen     Estado
---------------------------------------------
1     Gatos           1.jpg          N
2     Perros          2.jpg          N
3     Monos          NULL          NULL
4     Aves             NULL          NULL
Lo hice con LEFT JOIN ya que algunos registros no tienen imagenes necesariamente por eso algunos me resultan NULL.

Ahora si yo quisiera agregar una condición WHERE en la relación galeria-imagen donde indico el tipo de estado "P" me resulta esto:


Código:
SELECT p.producto_id, producto_nombre, i.producto_imagen_thumb, i.producto_imagen_estado
FROM producto p
LEFT JOIN (SELECT producto_id, producto_imagen_id FROM producto_galeria GROUP BY producto_id) AS g
ON p.producto_id=g.producto_id
LEFT JOIN (SELECT producto_imagen_id, producto_imagen_thumb, producto_imagen_estado FROM producto_imagen WHERE producto_imagen_estado='P') AS i
ON g.producto_imagen_id=i.producto_imagen_id
ORDER BY producto_nombre ASC

Y el resultado es este:

Código:
id     Producto     Imagen     Estado
---------------------------------------------
1     Gatos           NULL          NULL
2     Perros          NULL          NULL
3     Monos          NULL          NULL
4     Aves             NULL          NULL
Como ven no captura las imagenes con el estado "P"... intenté con ORDER BY producto_imagen_estado haber si la "P" se ponía arriba de la "N" pero nada!

Mi intención es llegar a :

Código:
id     Producto     Imagen     Estado
---------------------------------------------
1     Gatos           5.jpg          P
2     Perros          9.jpg          P
3     Monos          NULL          NULL
4     Aves             NULL          NULL
No sé que más agregarle o corregir en el query, espero me hayan entendido y me puedan ayudar. Saludos!
__________________
Quitenme la vida pero no la bebida.