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

[SOLUCIONADO] contar registros y ordenar

Estas en el tema de contar registros y ordenar en el foro de Mysql en Foros del Web. Buenos días, tengo un problema a la hora de sacar las canciones que le gustan a un usuario en mi web ordenadas por la más ...
  #1 (permalink)  
Antiguo 08/01/2013, 04:03
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 2 meses
Puntos: 0
contar registros y ordenar

Buenos días, tengo un problema a la hora de sacar las canciones que le gustan a un usuario en mi web ordenadas por la más votada.

Código:
musica
mu_id 	int(11)
mu_activo 	int(11)
Código:
likecancion
lc_id int(11)
lc_cancion int(11)
lc_usu 	int(11)
Código MySQL:
Ver original
  1. 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 musica.mu_activo=1 AND likecancion.lc_usu=1
  5. GROUP BY likecancion.lc_cancion

Mi problema está en el WHERE porque si lo quito, me saca todas las canciones ordenadas por mas votos, el problema esta, en que no se como diferenciar si ese usuario tiene algun voto o no. Como tiene que contar cuantos votos tiene entre todos y a parte tiene q sacar solo las canciones que ese usuario ha votado, no se como hacerlo.

A ver si alguien me puede ayudar!
Gracias de antemano
  #2 (permalink)  
Antiguo 08/01/2013, 13:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: contar registros y ordenar

Has probado algo así (empezaremos por lo más simple)
Código MySQL:
Ver original
  1. SELECT lc_cancion, COUNT(*) as total
  2.     FROM likecancion WHERE lc_usu = 1
  3.     GROUP BY lc_cancion
  4.     ORDER BY total DESC
  #3 (permalink)  
Antiguo 08/01/2013, 14:21
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 Darkmarine:

A reserva de que la consulta que te propone jurena sea lo que estás buscando, te recomiendo que incluyas algunos datos de ejemplo de tus tablas y a partir de esos datos nos digas exactamente qué es lo que esperas como salida... es más fácil visualizar el problema con datos más que con palabras.

Saludos
Leo.
  #4 (permalink)  
Antiguo 08/01/2013, 15:20
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: contar registros y ordenar

Código:
lc_id lc_cancion lc_usu 	lc_cuando
112 	1 	14 	2012-10-26 22:12:11
11 	2 	1 	2012-10-24 00:24:24
9 	3 	1 	2012-10-24 00:24:21
111 	3 	14 	2012-10-26 22:12:10
780 	5 	50 	2012-12-15 21:00:31
216 	6 	3 	2012-11-04 19:29:00
10 	6 	1 	2012-10-24 00:24:23
717 	6 	7 	2012-12-10 16:17:50
728 	6 	2 	2012-12-11 11:30:30

Código MySQL:
Ver original
  1. SELECT lc_cancion, COUNT(*) as total
  2. FROM likecancion
  3. WHERE lc_usu = 1
  4. GROUP BY lc_cancion

Esta sql funciona bien, lo que pasa es que me cuenta solo las canciones que le gustan a ese usuario, por lo que no hace el count total de todos los registros.

Me sacaria todas las canciones que le gustan a ese usuario pero el count estaria a 1, lo que necesito es que se me cuente dentro de las canciones que le gusten al lc_usu=1, cuantas veces se repite.

Última edición por Darkmarine; 08/01/2013 a las 16:06
  #5 (permalink)  
Antiguo 08/01/2013, 16:06
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.
  #6 (permalink)  
Antiguo 08/01/2013, 16:10
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: contar registros y ordenar

Leo eres un fenómeno!!! me ha funcionado a la perfección!! ya me gustaría saber tanto como vosotros, ahora me voy a empapar tu código para entenderlo y aprender.

Gracias a los dos por la ayuda es un placer contar con gente como vosotros :)

Etiquetas: agrupar
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 22:30.