Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/02/2012, 12:04
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.