Hacer un Ranking Top en MySQL Leido 20.471 veces

 
  Broco
Pregunta
Resuelta.
tengo una tabla asi
Puntos
Tabla: paraid,cantidadid,id

Osea un registro normal puede ser asi

Paraid | Cantidadid | id
__12__| ___20____| 12

Lo que necesito es saber que Paraid es la que tienes mas puntos.. uff.. pero parece imposible..
Paraid es la ID del usuario que recibe los puntos.. necesito hacer un orden DESC de las id con mas punto..

 

 





  Jesús
Respuesta correcta
El problema es que estás metiendo los campos que quieres en el join cuando sólo debes indicar la tabla y la condición.


select puntos.campoid as campoid,sum(puntos.tipo) as tipoo,usuarios.idu as idusuario,usuarios.nombre as nombre from puntos
left JOIN usuarios ON usuarios.idu = puntos.campoid
group by puntos.campoid order by tipoo DESC limit 20


 

 


  Jesús
Respuesta correcta
Puntos (Paraid | Cantidadid | id )

Top 10:



select paraid, sum(cantidadid) as total from puntos group by paraid order by total desc limit 10;


PD: Te recomiendo que te guardes en la tabla de usuarios el total de puntos para ahorrar consumo de cpu.

 

 


  Broco
¿que hace exactamente group?
 

 


  Jesús
Agrupa los contenidos que son iguales en el campo.

group by id, todos los que tengan el mismo id los agrupa en el mismo resultado, de ese modo puedes hacer un sum() para sumar todos los que coincidan con ese id.

 

 





  Broco
Ok, Gracias Jesus :)
 

 


  Skeletron
Broco.. Hay un libro en PDF, que son aproximadamente 400 hojas para leer, que te la recomiendo mucho.. para que conozcas las herramientas basicas de SQL.
Hay promedios y cosas que yo antes las hacia manualmente con 5 o 6 sentencias SQL, y que lugo descubri que con una sentencia SQL de no mas de 20 letras, ya daba el resultado perfecto

 

 


  Broco
Como le meto un Join?


select campoid,sum(tipo) as tipoo from puntos
left JOIN usuarios.idu,usuarios.nombre ON puntos.campoid=usuarios.idu
group by campoid order by tipoo DESC limit 20


me dice
errroYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'usuarios.nombre ON puntos.campoid=usuarios.idu group by campoid order by tipo' at line

 

 


  Jesús
Respuesta correcta
El problema es que estás metiendo los campos que quieres en el join cuando sólo debes indicar la tabla y la condición.


select puntos.campoid as campoid,sum(puntos.tipo) as tipoo,usuarios.idu as idusuario,usuarios.nombre as nombre from puntos
left JOIN usuarios ON usuarios.idu = puntos.campoid
group by puntos.campoid order by tipoo DESC limit 20


 

 


  Broco
Gracias tio luego te doy karma que he dado uno hace menos de 3 horas :)
 

 








    ¿Cuantas columnas?     | 2 columnas | 3 columnas | 4 columnas | 5 columnas | 6 columnas |  
    Escribe la dirección web de la imagen:
  Publica tu respuesta  |  Haz Click en el siguiente cuadro para escribir