Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/01/2013, 16:06
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: contar registros y ordenar

Hola de nuevo Darkmarine:

Olvidaste decirnos qué es lo que esperas obtener como salida a partir de tus datos de entrada, pero si entendí bien esto sería mas o menos así, con los datos que pusiste de ejemplo, y agregando los de la tabla musica, supongamos que tenemos esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM musica;
  2. +-------+-----------+
  3. | mu_id | mu_activo |
  4. +-------+-----------+
  5. |     1 |         1 |
  6. |     2 |         0 |
  7. |     3 |         1 |
  8. |     5 |         1 |
  9. |     6 |         1 |
  10. +-------+-----------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM likecancion;
  14. +-------+------------+--------+
  15. | lc_id | lc_cancion | lc_usu |
  16. +-------+------------+--------+
  17. |   112 |          1 |     14 |
  18. |    11 |          2 |      1 |
  19. |     9 |          3 |      1 |
  20. |   111 |          3 |     14 |
  21. |   780 |          5 |     50 |
  22. |   216 |          6 |      3 |
  23. |    10 |          6 |      1 |
  24. |   717 |          6 |      7 |
  25. |   728 |          6 |      2 |
  26. +-------+------------+--------+
  27. 9 rows in set (0.00 sec)

Al ejecutar la consulta que dices que funciona sin el WHERE, obtengo esto:

Código MySQL:
Ver original
  1. mysql> SELECT musica.mu_id, COUNT(likecancion.lc_cancion) AS total
  2.     -> FROM musica
  3.     -> INNER JOIN likecancion ON musica.mu_id = likecancion.lc_cancion
  4.     -> GROUP BY likecancion.lc_cancion
  5.     -> ORDER BY total DESC;
  6. +-------+-------+
  7. | mu_id | total |
  8. +-------+-------+
  9. |     6 |     4 |
  10. |     3 |     2 |
  11. |     1 |     1 |
  12. |     2 |     1 |
  13. |     5 |     1 |
  14. +-------+-------+
  15. 5 rows in set (0.00 sec)

Esto es, el número de like's que ha obtenido cada canción, hasta aquí creo que no hay problema, si entendí bien lo que quieres filtrar es SÓLO AQUELLAS CANCIONES QUE LE GUSTAN AL USUARIO... observando la tabla, deberían ser las canciones 2, 3, y 6... si esto es correcto, hay muchas formas para hacerlo, una sería con una subconsulta así:

Código MySQL:
Ver original
  1. mysql> SELECT musica.mu_id, COUNT(likecancion.lc_cancion) AS total
  2.     -> FROM musica
  3.     -> INNER JOIN likecancion ON musica.mu_id = likecancion.lc_cancion
  4.     -> WHERE
  5.     -> mu_id IN (SELECT lc_cancion FROM likecancion WHERE lc_usu = 1) AND
  6.     -> mu_activo = 1
  7.     -> GROUP BY likecancion.lc_cancion
  8.     -> ORDER BY total DESC;
  9. +-------+-------+
  10. | mu_id | total |
  11. +-------+-------+
  12. |     6 |     4 |
  13. |     3 |     2 |
  14. +-------+-------+
  15. 2 rows in set (0.00 sec)

Observa que no aparece la cancion 2, porque esta NO LA PUSE COMO ACTIVA EN LA TABLA musica...

Dale un vistazo para ver si esto es lo que necesitas, y si no ENTONCES COLOCA A PARTIR DE LOS DATOS QUE PUSISTE DE EJEMPLO QUÉ ES LO QUE NECESITAS OBTENER COMO SALIDA.

Saludos
Leo.