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

Consulta entre 2 tablas

Estas en el tema de Consulta entre 2 tablas en el foro de Mysql en Foros del Web. Hola, necesito ayuda con una consulta entre 2 tablas. Tengo la siguiente estructura- PRODUCTOS Código: ID – PRODUCTO 1 – Titulo Producto 1 2 – ...
  #1 (permalink)  
Antiguo 11/03/2010, 00:57
 
Fecha de Ingreso: mayo-2006
Mensajes: 119
Antigüedad: 17 años, 10 meses
Puntos: 0
Exclamación Consulta entre 2 tablas

Hola, necesito ayuda con una consulta entre 2 tablas.

Tengo la siguiente estructura-

PRODUCTOS
Código:
ID – PRODUCTO
1  – Titulo Producto 1
2  – Titulo Producto 2
FOTOS
Código:
ID_PRODUCTO - FOTO    - ORDEN
1 	    -  1.PNG  - 1 
1 	    -  2.PNG  - 2
2 	    -  1.PNG  - 2
2	    -  2.PNG  - 1
3 	    -  1.PNG  - 8
3     	    -  5.PNG  - 1
Necesito sacar un listado de todos los productos, incluida una sola FOTO según el ORDEN ASC.
Solo una imagen por producto y que ésta sea la de menor orden.
EJ:

Código:
ID   – PRODUCTO             – FOTO
1    -  Titulo Producto 1   - 1.PNG
2    -  Titulo Producto 2   - 2.PNG
3    -  Titulo Producto 3   - 5.PNG

Intente con la siguiente cosulta, entre otras varias…
SELECT * FROM PRODUCTOS AS prods
LEFT JOIN FOTOS AS pics ON pics. ID_PRODUCTO = prods.id
ORDER BY pics.orden ASC;

Pero me lista todos los productos y todas las fotos.


Espero haberme explicado.
Saludos.
  #2 (permalink)  
Antiguo 11/03/2010, 05:37
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta entre 2 tablas

Código SQL:
Ver original
  1. SELECT * FROM PRODUCTOS AS prods
  2. LEFT JOIN FOTOS AS pics ON pics. ID_PRODUCTO = prods.id
  3. GROUP BY prods.id ORDER BY pics.orden ASC;

así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/03/2010, 15:33
 
Fecha de Ingreso: mayo-2006
Mensajes: 119
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta entre 2 tablas

Hola, antes que nada, gracias por responder.

Esa query que me pasas me trae todos las productos y una sola foto, pero sin respetar el orden, digamos que usa random.

Saludos.

Última edición por ale_g; 11/03/2010 a las 17:25
  #4 (permalink)  
Antiguo 11/03/2010, 19:28
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, 4 meses
Puntos: 2658
Respuesta: Consulta entre 2 tablas

En realidad no usa random (eso sería si la cláusula dijese ORDER BY RAND(), y no es el caso).
El problema es que la sintaxis de MySQL exige que el GROUP BY vaya antes del ORDER BY, por lo que los registros repetidos quedan "escondidos" detrás del primero que está en la tabla.

La solución es simplemente poner el resultado del ORDER BY primero, pero en una subconsulta:
Código MySQL:
Ver original
  1.    SELECT * FROM PRODUCTOS AS prods
  2.    LEFT JOIN FOTOS AS pics ON pics. ID_PRODUCTO = prods.id  
  3.    ORDER BY pics.orden) T1

Tip: El ORDER BY es siempre ASC, por lo que solamente debes indicar algo distinto si quieres otra cosa.
__________________
¿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 11/03/2010, 20:16
 
Fecha de Ingreso: mayo-2006
Mensajes: 119
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Consulta entre 2 tablas

Hola gnzsoloyo, gracias por la informacion, nunca esta de mas.

te comento que ejecute la consulta que me posteas pero me sale error:

Error Code : 1060
Duplicate column name 'id'

saludos.
  #6 (permalink)  
Antiguo 11/03/2010, 21:46
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, 4 meses
Puntos: 2658
Respuesta: Consulta entre 2 tablas

Es un error obvio, porque en la subconsulta, al cruzar las tablas hay campos con nombres repetidos...
El problema se origina en un defecto de diseño de tabla por vicios formales de los desarrolladores, como por ejemplo, poner "ID" a un campo usado de PK, en lugar de "PRODUCTO_ID", "PICS_ID", como sería lo correcto, ya que de esa forma se evitaría tener que hacer definiciones de SELECT específicas, o bien facilitaría ciertos JOINS.

Tu única solución es poner en el SELECT de la subconsulta todos los campos a recuperar, por sus nombres y/o alias, teniendo en cuenta que no se deben repetir.
¿Se entiende la idea?

Tip: No uses nombres de campos que no puedan diferenciarse por cada tabla. Si te fijas en las bases modelo que los DBMS traen (caso Oracle, SQL Server, etc.), en ningún caso usan un nombre de campo "ID". Por algo será...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

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 04:39.