Ver Mensaje Individual
  #7 (permalink)  
Antiguo 01/11/2014, 19:19
Avatar de gnzsoloyo
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, 4 meses
Puntos: 2658
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Mira, voy a hacerte un ejemplo con los datos mas o menos como los propones tu, y veremos si realmente "falla" como dices.
Primero creamos las tablas y las cargamos:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS usuarios;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS comentarios;
  5. Query OK, 0 rows affected (0.00 sec)
  6.  
  7. mysql> CREATE TABLE IF NOT EXISTS usuarios (
  8.     ->     nombre VARCHAR(50),
  9.     ->     contrasena VARCHAR(200)
  10.     -> );
  11. Query OK, 0 rows affected (0.03 sec)
  12.  
  13. mysql>
  14. mysql> CREATE TABLE IF NOT EXISTS comentarios (
  15.     ->     texto VARCHAR(5000),
  16.     ->     author_nombre VARCHAR(50)
  17.     -> );
  18. Query OK, 0 rows affected (0.02 sec)
  19.  
  20. mysql>
  21. mysql> INSERT INTO usuarios(nombre, contrasena)
  22.     -> VALUES ('Juan', 'xx'),
  23.     -> ('pedro', 'xx'),
  24.     -> ('maria', 'xx'),
  25.     -> ('luisa', 'xx'),
  26.     -> ('jose', 'xx');
  27. Query OK, 5 rows affected (0.01 sec)
  28. Records: 5  Duplicates: 0  Warnings: 0
  29.  
  30. mysql>
  31. mysql> INSERT INTO comentarios(texto, author_nombre)
  32.     -> VALUES
  33.     -> ('aaaa', 'Juan'),
  34.     -> ('aaaa', 'Juan'),
  35.     -> ('aaaa', 'Juan'),
  36.     -> ('aaaa', 'Juan'),
  37.     -> ('aaaa', 'Juan'),
  38.     -> ('aaaa', 'Juan'),
  39.     -> ('aaaa', 'Juan'),
  40.     -> ('aaaa', 'Juan'),
  41.     -> ('aaaa', 'Juan'),
  42.     -> ('aaaa', 'Juan'),
  43.     -> ('aaaa', 'Juan'),
  44.     -> ('aaaa', 'Juan'),
  45.     -> ('aaaa', 'Juan'),
  46.     -> ('aaaa', 'Juan'),
  47.     -> ('aaaa', 'Juan'),
  48.     -> ('aaaa', 'Juan'),
  49.     -> ('aaaa', 'Juan'),
  50.     -> ('bbbb', 'pedro'),
  51.     -> ('bbbb', 'pedro'),
  52.     -> ('bbbb', 'pedro'),
  53.     -> ('bbbb', 'pedro'),
  54.     -> ('bbbb', 'pedro'),
  55.     -> ('bbbb', 'pedro'),
  56.     -> ('bbbb', 'pedro'),
  57.     -> ('bbbb', 'pedro'),
  58.     -> ('bbbb', 'pedro'),
  59.     -> ('cccc', 'maria'),
  60.     -> ('cccc', 'maria'),
  61.     -> ('cccc', 'maria'),
  62.     -> ('cccc', 'maria'),
  63.     -> ('cccc', 'maria'),
  64.     -> ('cccc', 'maria'),
  65.     -> ('dddd', 'luisa'),
  66.     -> ('dddd', 'luisa'),
  67.     -> ('dddd', 'luisa'),
  68.     -> ('dddd', 'luisa'),
  69.     -> ('dddd', 'luisa'),
  70.     -> ('dddd', 'luisa'),
  71.     -> ('dddd', 'luisa'),
  72.     -> ('dddd', 'luisa'),
  73.     -> ('dddd', 'luisa'),
  74.     -> ('dddd', 'luisa'),
  75.     -> ('dddd', 'luisa'),
  76.     -> ('dddd', 'luisa'),
  77.     -> ('dddd', 'luisa'),
  78.     -> ('dddd', 'luisa'),
  79.     -> ('dddd', 'luisa'),
  80.     -> ('dddd', 'luisa'),
  81.     -> ('dddd', 'luisa'),
  82.     -> ('dddd', 'luisa'),
  83.     -> ('dddd', 'luisa'),
  84.     -> ('dddd', 'luisa'),
  85.     -> ('eeee', 'jose'),
  86.     -> ('eeee', 'jose'),
  87.     -> ('eeee', 'jose'),
  88.     -> ('eeee', 'jose'),
  89.     -> ('eeee', 'jose'),
  90.     -> ('eeee', 'jose'),
  91.     -> ('eeee', 'jose'),
  92.     -> ('eeee', 'jose'),
  93.     -> ('eeee', 'jose'),
  94.     -> ('eeee', 'jose'),
  95.     -> ('eeee', 'jose'),
  96.     -> ('eeee', 'jose'),
  97.     -> ('eeee', 'jose'),
  98.     -> ('eeee', 'jose'),
  99.     -> ('eeee', 'jose'),
  100.     -> ('eeee', 'jose'),
  101.     -> ('eeee', 'jose'),
  102.     -> ('eeee', 'jose'),
  103.     -> ('eeee', 'jose'),
  104.     -> ('eeee', 'jose'),
  105.     -> ('eeee', 'jose'),
  106.     -> ('eeee', 'jose'),
  107.     -> ('eeee', 'jose'),
  108.     -> ('eeee', 'jose'),
  109.     -> ('eeee', 'jose'),
  110.     -> ('eeee', 'jose'),
  111.     -> ('eeee', 'jose'),
  112.     -> ('eeee', 'jose');
  113. Query OK, 80 rows affected (0.00 sec)
  114. Records: 80  Duplicates: 0  Warnings: 0
Luego hacemos uso de la query tal como te la propuse:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     U.nombre, COUNT(texto) CommentCount
  3.     -> FROM
  4.     ->     usuarios U
  5.     ->         INNER JOIN
  6.     ->     comentarios C ON U.nombre = C.author_nombre
  7.     -> GROUP BY U.nombre
  8.     -> ORDER BY CommentCount DESC
  9.     -> LIMIT 5;
  10. +--------+--------------+
  11. | nombre | CommentCount |
  12. +--------+--------------+
  13. | jose   |           28 |
  14. | luisa  |           20 |
  15. | Juan   |           17 |
  16. | pedro  |            9 |
  17. | maria  |            6 |
  18. +--------+--------------+
  19. 5 rows in set (0.00 sec)
Y... no, no falla. Devuelve los cinco, en orden descendente de cantidad de comentarios.
Incluso más. Si quiero buscar el top 3, sería:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     U.nombre, COUNT(texto) CommentCount
  3.     -> FROM
  4.     ->     usuarios U
  5.     ->         INNER JOIN
  6.     ->     comentarios C ON U.nombre = C.author_nombre
  7.     -> GROUP BY U.nombre
  8.     -> ORDER BY CommentCount DESC
  9.     -> LIMIT 3;
  10. +--------+--------------+
  11. | nombre | CommentCount |
  12. +--------+--------------+
  13. | jose   |           28 |
  14. | luisa  |           20 |
  15. | Juan   |           17 |
  16. +--------+--------------+
  17. 3 rows in set (0.00 sec)

Y devuelve exactamente los mismos tres.


Así que, ¿cuál es el problema que le ves?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)