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

Problema con el Order con GROUP BY

Estas en el tema de Problema con el Order con GROUP BY en el foro de Mysql en Foros del Web. Hola a todos, a ver si alguien me da una ayudita porque estoy sacandome canas verdes con esto si quiero mostrar los 20 comentarios mas ...
  #1 (permalink)  
Antiguo 03/04/2012, 20:58
 
Fecha de Ingreso: febrero-2011
Mensajes: 6
Antigüedad: 8 años, 9 meses
Puntos: 0
Problema con el Order con GROUP BY

Hola a todos, a ver si alguien me da una ayudita porque estoy sacandome canas verdes con esto

si quiero mostrar los 20 comentarios mas votados pero sin repetir usuarios, osea, si tengo los siguientes comentarios en mi base de datos:
idcomentario 282 - nick pepito - 10 votos
idcomentario 288 - nick pepito- 9 votos
idcomentario 243 - nick juanito- 6 votos
idcomentario 240 - nick juanito- 4 votos
idcomentario 285 - nick carlitos- 3 votos

yo quiero hacer un query que me traiga los datos asi:
idcomentario 282 - nick pepito - 10 votos
idcomentario 243 - nick juanito- 6 votos
idcomentario 285 - nick carlitos- 3 votos

el problema es que cuando uso GROUP BY me lo trae asi:
idcomentario 288 - nick pepito- 9 votos
idcomentario 240 - nick juanito- 4 votos
idcomentario 285 - nick carlitos- 3 votos

osea no repite al usuario PERO trae el de minimo votos, y eso que lo ordeno por votos !

mi codigo es algo asi:

SELECT comentarios.idcomentario, comentarios.idusuario, usuario.nick, comentarios.votos, comentarios.texto
FROM comentarios LEFT JOIN usuario
ON comentarios.idusuario=usuario.idusuario
WHERE comentarios.status='1'
GROUP BY comentarios.idusuario
ORDER BY comentarios.votos DESC LIMIT 20

alguien puede ayudarme?
  #2 (permalink)  
Antiguo 04/04/2012, 05:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 11 años, 8 meses
Puntos: 574
Respuesta: Problema con el Order con GROUP BY

Código MySQL:
Ver original
  1. SELECT c1.idcomentario, c1.idusuario, u.nick, c1.votos, c1.texto
  2. FROM comentarios c1 INNER JOIN usuario u
  3. ON c1.idusuario=u.idusuario
  4. WHERE c1.status='1'
  5. AND c1.idcomentario
  6.    IN (SELECT c2.idcomentario
  7.             FROM comentarios c2 INNER JOIN
  8.                 (SELECT c3.idusuario, MAX(c3.votos) as MVotos
  9.                     FROM comentarios c3) as Sbc
  10.                  ON c2.idusuario=Sbc.idusuario AND c2.votos=Sbc.MVotos
  11.        )
  12. ORDER BY c1.votos DESC LIMIT 20

Algo asi.... no se que pasará cuando dos comentarios del mismo usuari tengan el mismo numero de votos...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: group, join, order, query, select
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:09.