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

avg() para las imagenes mas votadas no da

Estas en el tema de avg() para las imagenes mas votadas no da en el foro de Mysql en Foros del Web. Siguiendo con un tema de la semana pasada, estoy queriendo listar las "imagenes mas votadas" en unos albums de fotos. La cuestion es que usando ...
  #1 (permalink)  
Antiguo 09/11/2010, 08:53
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Pregunta avg() para las imagenes mas votadas no da

Siguiendo con un tema de la semana pasada, estoy queriendo listar las "imagenes mas votadas" en unos albums de fotos. La cuestion es que usando avg() no obtengo resultados ordenados por puntaje (por promedio). Sin embargo, aparentemente en mi servidor local si tengo resultados ordenados.

Esta es la consulta:

Código MySQL:
Ver original
  1. SELECT img.id, img.titulo, img.nombre_foto, img.tecnica, img.medidas,
  2. AVG(rate.puntaje) promedio , album.id AS id_album, album.titulo AS titulo_album, album.id_usuario AS id_autor
  3. FROM fotos AS img
  4. LEFT JOIN puntuaciones AS rate ON img.id = rate.id_foto
  5. INNER JOIN albums AS album ON img.id_album = album.id
  6. GROUP BY img.id ORDER BY rate.puntaje DESC LIMIT 12

Y esta es la prueba de que no esta funcionando. Ayer el tigre blanco insistia en quedar primero con solo 3.5 puntos. :o\

La documentacion de avg() es muy escueta. Me gustaria saber si mi fallo es en la consulta o si cabe la posibilidad de que derive de un problema de versiones de mysql (tengo dudas sobre mi hosting).
  #2 (permalink)  
Antiguo 09/11/2010, 09:15
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, 5 meses
Puntos: 2658
Respuesta: avg() para las imagenes mas votadas no da

No estás ordenando por el promedio de puntajes, sino por el valor de rate.puntaje.
En todo caso habría que Probar:
Código MySQL:
Ver original
  1.    img.id, img.titulo,
  2.    img.nombre_foto,
  3.    img.tecnica,
  4.    img.medidas,
  5.    AVG(rate.puntaje) promedio ,
  6.    album.id  id_album,
  7.    album.titulo titulo_album,
  8.    album.id_usuario id_autor
  9. FROM fotos img LEFT JOIN puntuaciones rate ON img.id = rate.id_foto INNER JOIN
  10.    albums album ON img.id_album = album.id
  11. GROUP BY img.id
  12. ORDER BY promedio DESC, titulo_album ASC
__________________
¿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 09/11/2010, 09:19
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: avg() para las imagenes mas votadas no da

Gracias Gonzalo! Va perfectamente. Había que usar el dichoso alias.

ORDER BY promedio

Aunque no entendí por que agregaste la consigna del titulo del album: ORDER BY promedio DESC, titulo_album ASC. Eso ordena los albums con igual puntaje por orden alfabetico, verdad?

Pregunta aparte: la version 4 de mysql esta muy atras de la 5? Porque estoy viendo que mi servidor tiene mysql 4 cuando dijeron que nos migraban a uno con la 5...
  #4 (permalink)  
Antiguo 09/11/2010, 09:38
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: avg() para las imagenes mas votadas no da

Ok. Tomando tu ejemplo de ordenar segun dos criterios, pude listar por cantidad de puntos y luego por cantidad de votos:

Código MySQL:
Ver original
  1. img.id, img.titulo, img.nombre_foto, img.tecnica, img.medidas,
  2. AVG(rate.puntaje) promedio,
  3. album.id AS id_album, album.titulo AS titulo_album, album.id_usuario AS id_autor,
  4. count(rate.puntaje) AS votos
  5. FROM fotos AS img
  6. LEFT JOIN puntuaciones AS rate ON img.id = rate.id_foto
  7. INNER JOIN albums AS album ON img.id_album = album.id
  8. GROUP BY img.id
  9. ORDER BY promedio DESC, votos DESC

Parece que funciona pefectamente. Mil gracias de nuevo.

Respecto a si pedir la migracion de mysql 4 a 5, me gustaría algun comentario. El hosting no se esta portando bien con esto... :o\
  #5 (permalink)  
Antiguo 09/11/2010, 12:24
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, 5 meses
Puntos: 2658
Respuesta: avg() para las imagenes mas votadas no da

Puse ese campo cor el caso de que dos registros tueviesen el mismo promedio. Una simple cuestion de detalle.

Cita:
Pregunta aparte: la version 4 de mysql esta muy atras de la 5? Porque estoy viendo que mi servidor tiene mysql 4 cuando dijeron que nos migraban a uno con la 5...
MySQL 4.x es actualmente basura discontinuada. Es como estar usando Windows 3.11 for Workgroups
__________________
¿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: avg, imagenes, mas
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 11:08.