Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/07/2012, 09:54
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: Como mostrar los datos de esta query

Hola mark1829:

No me queda claro qué es lo que necesitas mostrar, creo que es conveniente que nos pongas algunos datos de ejemplo de tus tablas y que a partir de estos datos nos digas qué es lo que estás esperando de salida. Por lo pronto te comento algunos detalles que conviene que nos expliques mejor:

Primero, ¿por qué tu tabla de post's tiene un campo cantidad_votos?, por el nombre podría imaginar que almacenas la cantidad de veces que se ha votado por un post, pero hay que recordar que si un campo PUEDE SER CALCULADO entonces NO DEBE APARECER EN LA TABLA. En todo caso, pasa saber los post's que han sido votados sólo deberías preguntara por aquellos donde cantidad_votos sea mayor a 0, pero te repito que esto es un mal modelo de datos.

Si entendí correctamente, cada vez que se registra un voto de un usuario sobre algún post, se registra en la tabla de VOTOS, y si estoy en lo correcto actualizas también tu tabla de post's para incrementar el número de votos. Este es un modelo erróneo de datos, para calcular el número de votos que ha recibido un post simplemente tendrías que hacer un COUNT sobre la tabla de votos. Observa este script, supongamos que tienes esta información en tus tablas

Código MySQL:
Ver original
  1. mysql> SELECT * FROM posts;
  2. +---------+--------+---------+
  3. | id_post | titulo | texto   |
  4. +---------+--------+---------+
  5. |       1 | post 1 | texto 1 |
  6. |       2 | post 2 | texto 3 |
  7. |       3 | post 3 | texto 3 |
  8. |       4 | post 4 | texto 4 |
  9. +---------+--------+---------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM votos;
  13. +----------------+------------+
  14. | id_post_votado | id_us_voto |
  15. +----------------+------------+
  16. |              1 |          1 |
  17. |              1 |          2 |
  18. |              1 |          3 |
  19. |              2 |          1 |
  20. |              3 |          2 |
  21. |              3 |          3 |
  22. +----------------+------------+
  23. 6 rows in set (0.02 sec)

De aquí podemos deducir que el post 1 ha sido votado 3 veces (por los usuarios 1, 2 y 3), el post 2 sólo ha sido votado una vez (por el usuario 1) y el post 3 ha sido votado por los usuarios 2 y 3. también podemos notar que el Post 4 NO HA SIDO VOTADO POR NINGÚN USUARIO. Con esta información podríamos calcular el número de votos para cada post así:

Código MySQL:
Ver original
  1. mysql> SELECT p.id_post, p.titulo, p.texto, COUNT(id_post_votado) total_votos
  2.     -> FROM posts p
  3.     -> LEFT JOIN votos v ON v.id_post_votado = p.id_post
  4.     -> GROUP BY p.id_post, p.titulo, p.texto;
  5. +---------+--------+---------+-------------+
  6. | id_post | titulo | texto   | total_votos |
  7. +---------+--------+---------+-------------+
  8. |       1 | post 1 | texto 1 |           3 |
  9. |       2 | post 2 | texto 3 |           1 |
  10. |       3 | post 3 | texto 3 |           2 |
  11. |       4 | post 4 | texto 4 |           0 |
  12. +---------+--------+---------+-------------+
  13. 4 rows in set (0.00 sec)

Ahora nos faltaría que nos digas cómo es la estructura de tu tabla de usuarios y que nos digas qué es lo que quiere mostrar de esta información.

Dale un vistazo y nos comentas.

Saludos
Leo.