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

Group by y Order by no me devuelven lo que quiero

Estas en el tema de Group by y Order by no me devuelven lo que quiero en el foro de Mysql en Foros del Web. Tengo una tabla llamada "mensajes" con los campos: id, parent, thread, catid,name,userid,subject,time,ip y algunos más. La cuestión es esta: Necesito mostrar los últimos 6 mensajes ...
  #1 (permalink)  
Antiguo 09/06/2010, 07:48
 
Fecha de Ingreso: noviembre-2006
Mensajes: 86
Antigüedad: 18 años
Puntos: 7
Group by y Order by no me devuelven lo que quiero

Tengo una tabla llamada "mensajes" con los campos: id, parent, thread, catid,name,userid,subject,time,ip y algunos más.

La cuestión es esta: Necesito mostrar los últimos 6 mensajes publicados en el foro. Esto sería fácil, pero lo que quiero es que, si hay un tema demasiado popular, no me aparezcan todas las respuestas, sino una sola. ¿Qué quiero decir? Que si los últimos 6 mensajes que se publicaron en el foro pertenecen al mismo tema (al mismo thread), que me muestre sólo la última respuesta, y después me muestre otros 5 mensajes distintos. Es decir, entre lo 6 últimos mensajes, no se puede duplicar el thread.

La sentencia mysql que uso para eso es:

Código:
select id,catid,name,userid,subject from mensajes group by thread order by id desc limit 6
Nota: Los campos requiero esos porque son los que necesito.

Sin embargo, parece que el "order by" ahí no funciona, porque en lugar de mostrarme la última respuesta de un thread, me muestra la primera. Intenté cambiar desc por asc y no funcionó, y camié id por time, y tampoco funcionó. También alteré el orden: puse primero el order by y después el group by y tira un error.

¿Qué estoy haciendo mlal? ¿Es que no funciona de esa forma el order by? ¿Qué soluciones proponen?


Cita:
EDIT: Según el manual oficial de mysql, los order by que se pongan después del group by serán ignorados

Última edición por DarkSlash; 09/06/2010 a las 08:00
  #2 (permalink)  
Antiguo 09/06/2010, 07:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Group by y Order by no me devuelven lo que quiero

Yo te propongo que hagas primero el ordenamiento interno y luego limites. para eso puedes hacer subconsultas.

quedaría algo así

Código SQL:
Ver original
  1. SELECT
  2. t.id,
  3. t.catid,
  4. t.name,
  5. t.userid,
  6. t.subject
  7. FROM
  8. (
  9.  SELECT id,
  10.  catid,
  11.  name,
  12.  userid,
  13.  subject
  14.  FROM mensajes
  15.  GROUP BY thread
  16.  ORDER BY id DESC
  17. )t
  18. LIMIT 6;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 09/06/2010, 08:01
 
Fecha de Ingreso: noviembre-2006
Mensajes: 86
Antigüedad: 18 años
Puntos: 7
Respuesta: Group by y Order by no me devuelven lo que quiero

Gracias por responder! Fijate que ahí edité mi post agregando esto: Según el manual oficial de mysql, los order by que se pongan después del group by serán ignorados

Lo cual dejaría a tu sentencia en la misma situación que la mía... :(
  #4 (permalink)  
Antiguo 09/06/2010, 08:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Group by y Order by no me devuelven lo que quiero

Entonces hazlo así:
Código SQL:
Ver original
  1. SELECT
  2. t.id,
  3. t.catid,
  4. t.name,
  5. t.userid,
  6. t.subject
  7. FROM
  8. (
  9.  SELECT id,
  10.  catid,
  11.  name,
  12.  userid,
  13.  subject
  14.  FROM mensajes
  15.  GROUP BY thread  
  16. )t
  17. ORDER BY t.id DESC
  18. LIMIT 6;

PD: podrías poner el enlace donde el manual oficial dice eso?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 09/06/2010, 08:15
 
Fecha de Ingreso: noviembre-2006
Mensajes: 86
Antigüedad: 18 años
Puntos: 7
Respuesta: Group by y Order by no me devuelven lo que quiero

Acá! http://bugs.mysql.com/bug.php?id=32202

:)
  #6 (permalink)  
Antiguo 09/06/2010, 08:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Group by y Order by no me devuelven lo que quiero

En esta misma pagina te dan la misma solución que te di anteriormente.
Te funcionó?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 09/06/2010, 08:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Group by y Order by no me devuelven lo que quiero

Primero ordenar, luego agrupar...
Tomando a Huesos52:
Código MySQL:
Ver original
  1.    t.id, t.catid, t.name, t.userid, t.subject  
  2.     (SELECT id,  catid,  name,  userid,  subject , thread
  3.     FROM mensajes
  4.     ORDER BY t.id DESC) t
  5. GROUP BY t.thread  
__________________
¿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, order
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 14:25.