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

Top 5 Comentarios de Usuarios Mysql y PHP

Estas en el tema de Top 5 Comentarios de Usuarios Mysql y PHP en el foro de Bases de Datos General en Foros del Web. Saludos a toda la comunidad forosdelweb.com. Tengo una tabla de usuarios y otra de comentarios y quiero elegir entre los usuarios los mejores que tengan ...
  #1 (permalink)  
Antiguo 31/10/2014, 13:27
 
Fecha de Ingreso: octubre-2010
Ubicación: venezuela
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Ayuda! Top 5 Comentarios de Usuarios Mysql y PHP

Saludos a toda la comunidad forosdelweb.com. Tengo una tabla de usuarios y otra de comentarios y quiero elegir entre los usuarios los mejores que tengan mayor cantidad de comentarios en la tabla hasta un limite de 5

Estructura de la tabla

usuarios
id | nombre | contrasena

comentarios
id | texto | author_nombre

NOTA: cada vez que un usuario hace un comentario este se guarda en la tabla de comentarios y coloca su nombre en la columna author_nombre lo que quiero es que cuente las veces que los nombres se repitan en la tabla comentario y lo muestre de la siguiente manera:

TOP 10 usuarios:

Nombre --------- comentarios
Juan-----------------30
pedro-----------------23
maria-----------------16
luisa-----------------10
jose-----------------05


Por favor si se puede realizar necesito vuestra ayuda, mucha gracias!

Última edición por wambax; 31/10/2014 a las 13:36
  #2 (permalink)  
Antiguo 31/10/2014, 13:37
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, 4 meses
Puntos: 2658
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Pregunta: ¿Intentaste hacer la consulta por tu cuenta?
Si es así, postea lo que tienes, porque por la descripción es una consulta de manual básico...

Si no lo intentaste, buen, hazlo. Necesitamos ver qué tanto sabes de SQL, a fin de guiarte mejor.
__________________
¿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 31/10/2014, 13:44
 
Fecha de Ingreso: octubre-2010
Ubicación: venezuela
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Hola gnzsoloyo gracias por tu respuesta si claro tengo el siguiente codigo:


Código SQL:
Ver original
  1. SELECT
  2.   usuarios.nombre,
  3.   COUNT(comentarios.id) AS CommentCount
  4. FROM
  5.   usuarios
  6.   INNER JOIN comentarios ON usuarios.id = comentarios.author_nombre
  7. GROUP BY
  8.   usuarios.nombre
  9. ORDER BY
  10.   COUNT(comentarios.id) DESC LIMIT 0,5

Pero no me hace la funcion que necesito e leido en los manuales de Mysql pero no encuentro la forma que muestre el top 5

Última edición por gnzsoloyo; 31/10/2014 a las 14:50
  #4 (permalink)  
Antiguo 31/10/2014, 14:53
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, 4 meses
Puntos: 2658
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Cerca, cerca...
Código MySQL:
Ver original
  1. SELECT U.nombre, COUNT(*) CommentCount
  2. FROM usuarios U
  3.   INNER JOIN comentarios C ON U.nombre = C.author_nombre
  4. GROUP BY U.nombre
  5. ORDER BY CommentCount DESC
Lo que tienes mal, en principio, es que en la tabla "Comentarios" lo que debe ir es el ID del autor, y no su nombre.
Por otro lado, no debes poner el COUNT() en el ORDER BY sino el alias creado, o el orden de la columna en el SELECT:
Código MySQL:
Ver original
  1. SELECT U.nombre, COUNT(*) CommentCount
  2. FROM usuarios U
  3.   INNER JOIN comentarios C ON U.nombre = C.author_nombre
  4. GROUP BY U.nombre
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 31/10/2014, 21:00
 
Fecha de Ingreso: octubre-2010
Ubicación: venezuela
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Ya lo hice pero siguen si imprimir el TOP que necesito si alguien mas me pudiera ayudar tambien le agradeceria mucho.
  #6 (permalink)  
Antiguo 01/11/2014, 04:11
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, 4 meses
Puntos: 2658
Respuesta: Top 5 Comentarios de Usuarios Mysql y PHP

Muestra el resultado que obtienes, y un ejemplo de cómo debería quedar según tú.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 01/11/2014, 19:19
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, 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)

Etiquetas: comentarios, mysql, php, top, usuarios
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 02:09.