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

Ordenar el GROUP BY (3 tablas)

Estas en el tema de Ordenar el GROUP BY (3 tablas) en el foro de Mysql en Foros del Web. Veamos, tengo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT productes . id , productes_idm . nom , l2_galeria . imatge FROM productes INNER JOIN productes_idm ...
  #1 (permalink)  
Antiguo 18/05/2011, 08:12
 
Fecha de Ingreso: agosto-2003
Mensajes: 72
Antigüedad: 20 años, 8 meses
Puntos: 1
Ordenar el GROUP BY (3 tablas)

Veamos, tengo:

Código SQL:
Ver original
  1. SELECT productes.id, productes_idm.nom, l2_galeria.imatge FROM productes
  2. INNER JOIN productes_idm ON productes.id = productes_idm.idp
  3. INNER JOIN l2_galeria ON productes.id = l2_galeria.id_galeria
  4. WHERE productes_idm.idm="esp"
  5. GROUP BY l2_galeria.id_galeria

Por un lado tengo:

Tabla productes
id | estado | demás campos...

1 | 1 | ...
2 | 1 | ...
3 | 0 | ...
4 | 1 | ...
5 | 0 | ...

Tabla productos_idm
idp | idm | nom

1 | esp | hola que tal
1 | cat | hola que tal
2 | esp | hola que tal 2
2 | cat | hola que tal 2
3 | esp | hola que tal 3
3 | cat | hola que tal 3
etc...


Tabla l2_galeria
id | id_galeria | imatge | orden

1 | 1 | imagen1.jpg | 10
2 | 1 | imagen2.jpg | 5
3 | 1 | imagen3.jpg | 4

4 | 2 | imagen4.jpg | 3
5 | 2 | imagen5.jpg | 1

6 | 3 | imagen6.jpg | 7
7 | 3 | imagen7.jpg | 2
8 | 3 | imagen8.jpg | 5

9 | 4 | imagen9.jpg | 3
10 | 4 | imagen10.jpg | 6

11 | 5 | imagen11.jpg | 5
12 | 5 | imagen12.jpg | 3


El Group By lo pongo porque al hacer el INNER JOIN me devuelve varias imagenes de la tabla l2_galeria, pero yo sólo necesito que me devuelva una.

Poniendo el group by lo consigo, pero me devuelve un resultado aleatorio. Lo que no consigo hacer es que me devuelva la imagen que tenga el "orden" más bajo en todos los casos.

He probado con queries en los INNER JOINS, pero no se me da demasiado bien esto del SQL...

A ver si me podéis hechar una mano, porque me voy a volver loco...
  #2 (permalink)  
Antiguo 18/05/2011, 08:27
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: Ordenar el GROUP BY (3 tablas)

El problema es que el ORDER BY va siempre después del GROUP BY, pero este sólo toma el primer registro que cumple la condición y el resto se "esconden".
Para lograr lo que quieres hay que ordenar primero, y eso sólo lo puedes hacer si usas subconsultas:
Código MySQL:
Ver original
  1.     id,
  2.     nom,
  3.     imatge
  4.     (SELECT P.id, PD.nom, G.imatge
  5.     FROM productes P
  6.         INNER JOIN productes_idm PD ON P.id = productes_PD.idp
  7.         INNER JOIN l2_galeria G ON P.id = G.id_galeria
  8.     WHERE productes_idm.idm="esp"
  9.     ORDER BY P.id, PD.nom, G.imatge) T1
  10. GROUP BY id_galeria
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/05/2011, 11:55
 
Fecha de Ingreso: agosto-2003
Mensajes: 72
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Ordenar el GROUP BY (3 tablas)

Muchas gracias, me ha funcionado perfectamente.

Sigo sin entender muy bien el funcionamiento, pero bueno, ha funcionado... :)
  #4 (permalink)  
Antiguo 18/05/2011, 12:26
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: Ordenar el GROUP BY (3 tablas)

Cita:
Iniciado por Tebb Ver Mensaje
Muchas gracias, me ha funcionado perfectamente.

Sigo sin entender muy bien el funcionamiento, pero bueno, ha funcionado... :)
¿Qué es lo que no entiendes del tema? ¿Lo del ORDER BY, lo de GROUP BY o las subconsultas?
__________________
¿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: group, 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 08:00.