Ver Mensaje Individual
  #5 (permalink)  
Antiguo 18/07/2012, 11:31
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 de nuevo mark1829:

Tienes muchas formas de obtener lo que necesitas, utilizando filtos como NOT IN, NOT EXISTS, o JOIN's... me hubiera gustado que hubieras posteado algo de lo que intentaste hacer. Aquí está una manera para hacer más o menos lo que necesitas:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   p.id_post,
  3.     ->   p.titulo,
  4.     ->   p.texto,
  5.     ->   COUNT(v.id_post_votado) total_votos,
  6.     ->   IF(v2.id_post_votado IS NULL, 'NO', 'SI') ya_votaste
  7.     -> FROM posts p
  8.     -> LEFT JOIN votos v ON v.id_post_votado = p.id_post
  9.     -> LEFT JOIN votos v2 ON v2.id_post_votado = p.id_post
  10.     ->   AND V2.id_us_voto = 1
  11.     -> GROUP BY p.id_post, p.titulo, p.texto;
  12. +---------+--------+---------+-------------+------------+
  13. | id_post | titulo | texto   | total_votos | ya_votaste |
  14. +---------+--------+---------+-------------+------------+
  15. |       1 | post 1 | texto 1 |           3 | SI         |
  16. |       2 | post 2 | texto 3 |           1 | SI         |
  17. |       3 | post 3 | texto 3 |           2 | NO         |
  18. |       4 | post 4 | texto 4 |           0 | NO         |
  19. +---------+--------+---------+-------------+------------+
  20. 4 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT
  23.     ->   p.id_post,
  24.     ->   p.titulo,
  25.     ->   p.texto,
  26.     ->   COUNT(v.id_post_votado) total_votos,
  27.     ->   IF(v2.id_post_votado IS NULL, 'NO', 'SI') ya_votaste
  28.     -> FROM posts p
  29.     -> LEFT JOIN votos v ON v.id_post_votado = p.id_post
  30.     -> LEFT JOIN votos v2 ON v2.id_post_votado = p.id_post
  31.     ->   AND V2.id_us_voto = 3
  32.     -> GROUP BY p.id_post, p.titulo, p.texto;
  33. +---------+--------+---------+-------------+------------+
  34. | id_post | titulo | texto   | total_votos | ya_votaste |
  35. +---------+--------+---------+-------------+------------+
  36. |       1 | post 1 | texto 1 |           3 | SI         |
  37. |       2 | post 2 | texto 3 |           1 | NO         |
  38. |       3 | post 3 | texto 3 |           2 | SI         |
  39. |       4 | post 4 | texto 4 |           0 | NO         |
  40. +---------+--------+---------+-------------+------------+
  41. 4 rows in set (0.00 sec)

Observa que estoy generando una nueva columna llamada YA_VOTASTE, donde aparece con un SI o un NO dependiendo el caso. Probando la consulta para el usuario 1, se observa que el ya votó los post's 1 y 2, por lo tanto ya no debería poder votar nuevamente, lo mismo para el usuario 3. Observa que hago un doble LEFT JOIN sobre la tabla votos... una para considerar a todos los usuarios y otra para considerar sólo al usuario que se está analizando.

Te repito, esta no es la única manera de obtener lo que necesitas, sigue investigando un poco para que encuentres otras alternativas que pueden ser mejores a esta.

Saludos
Leo.