Hola sdavila21:
Para entender en donde está el problema, debes recordar que la cláusula ORDER BY se ejecuta AL FINAL DE LA CONSULTA, es decir, primero se realizaría el SELECT con sus respectivos cálculos y al final la ordenación, es por eso que no coinciden los datos que quieres... Dado que el ranking depende en primer lugar del ORDEN, entonces DEBES FORZAR A QUE PRIMERO SE ORDENEN y después realizar la numeración para obtener el ranking, esto lo puedes hacer de distintas formas, la más simple es simplemente metiéndolo en una subconsulta. Checa este ejemplo:
Supongamos que tienes una tabla más o menos así:
Código MySQL:
Ver original+------+-----------+
| id | usuario |
+------+-----------+
| 1 | usuario A |
| 2 | usuario A |
| 3 | usuario B |
| 4 | usuario B |
| 5 | usuario B |
| 6 | usuario B |
| 7 | usuario C |
| 8 | usuario C |
| 9 | usuario C |
+------+-----------+
Para obtener el total de mensajes, simplemente haces un COUNT y ordenas por el campo calculado:
Código MySQL:
Ver original+-----------+-------+
| usuario | total |
+-----------+-------+
| usuario B | 4 |
| usuario C | 3 |
| usuario A | 2 |
+-----------+-------+
Ahora bien, este resultado es el que quieres numerar o "rankear", por lo tanto, lo pones como una SUBCONSULTA, para numerar los resultados ya ordenados. En otras palabras, haces algo como esto:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
mysql
> SELECT @rownum
:=@rownum
+1 rank
, usuario
, total
+------+-----------+-------+
| rank | usuario | total |
+------+-----------+-------+
| 1 | usuario B | 4 |
| 2 | usuario C | 3 |
| 3 | usuario A | 2 |
+------+-----------+-------+
Se entiende donde estaba el problema??? haz la prueba y nos comentas.
Saludos
Leo.