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

Sumar dos count con campo en común

Estas en el tema de Sumar dos count con campo en común en el foro de Mysql en Foros del Web. Hola amigos, Tengo este problemillas, dos tablas donde almaceno los temas abiertos por un usuario en el foro y la que almacena las respuestas, uno ...
  #1 (permalink)  
Antiguo 28/02/2012, 11:37
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Sumar dos count con campo en común

Hola amigos,

Tengo este problemillas, dos tablas donde almaceno los temas abiertos por un usuario en el foro y la que almacena las respuestas, uno de los campos en común es UsuarioId

Necesito saber los 10 usuarios que más participan en los foros en una fecha determinada pero no sé como crear en una sola consulta donde obtenga sencillamente el UsuarioId y el total de mensajes sumando temas abiertos y respuestas del mismo usuario.

El total de temas abiertos lo obtengo así:

SELECT UsuarioId,count(*)AS TotalTemas FROM ForosTemas GROUP BY UsuarioId ORDER BY TotalTemas DESC LIMIT 0,10

El total de respuestas así:

SELECT UsuarioId,count(*)AS TotalRespuestas FROM ForosRespuestas GROUP BY UsuarioId ORDER BY TotalRespuestas DESC LIMIT 0,10

Lo que necesito es obtener como digo, el usuarioid, el total de intervenciones y la fecha de las mismas.

Gracias anticipadas!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 28/02/2012, 12:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Sumar dos count con campo en común

Hola yomesmo:

Hay muchas formas de abordar este problema, sólo era cuestión de investigar un poco, pero veamos si esto te sirve. En primer lugar, hay que considerar hechos importantes que no mencionas en tu post.

1. pueden haber usuarios que sólo hayan publicado temas, pero no respuestas????
2. puede haber usuarios que sólo hayan publicado respuestas pero no temas????
3. todos los usuarios tienen al menos un tema y una respuesta publicados???

A partir de este hecho, las estrategias pueden variar entre utilizar join's o utilizar union's, la respuesta ideal sería utilizar un FULL JOIN, pero MySQL no soporta este tipo de unión, sin embargo para lo que planteas podrías simplemente hacer un UNION. Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM temas;
  2. +-----------+-------------+
  3. | usuarioId | descripcion |
  4. +-----------+-------------+
  5. |         1 | tema 1      |
  6. |         1 | tema 2      |
  7. |         2 | tema 3      |
  8. |         3 | tema 4      |
  9. +-----------+-------------+
  10. 4 rows in set (0.08 sec)
  11.  
  12. mysql> SELECT * FROM respuestas;
  13. +-----------+-------------+
  14. | usuarioId | descripcion |
  15. +-----------+-------------+
  16. |         3 | respuesta 1 |
  17. |         2 | respuesta 2 |
  18. |         2 | respuesta 3 |
  19. |         5 | respuesta 4 |
  20. +-----------+-------------+
  21. 4 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT usuarioid, COUNT(*) FROM (
  24.     -> SELECT usuarioid FROM temas
  25.     -> UNION ALL
  26.     -> SELECT usuarioid FROM respuestas) T
  27.     -> GROUP BY usuarioid;
  28. +-----------+----------+
  29. | usuarioid | COUNT(*) |
  30. +-----------+----------+
  31. |         1 |        2 |
  32. |         2 |        3 |
  33. |         3 |        2 |
  34. |         5 |        1 |
  35. +-----------+----------+
  36. 4 rows in set (0.00 sec)

Para obtener sólo los diez usuarios que más hay participados ordenas por el total de manera descendente y utilizas LIMIT. Te repito, esta es solo una de las formas en que puedes resolver tu consulta, pero podrías buscar alguna otra alternativa. Te recomiendo que le preguntes a San GOOGLE ¿Cómo simular un FULL OUTER JOIN con MySQL?

Saludos
Leo.

Etiquetas: count, select, tabla, campos
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 16:34.