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

sacar dos canciones de cada artista..

Estas en el tema de sacar dos canciones de cada artista.. en el foro de Mysql en Foros del Web. Artista id Nombre 1 Juan 2 Pepe ... Cancion id Titulo artista 1 Titulo1 2 2 Titulo2 1 ... Como sería la query para sacar ...
  #1 (permalink)  
Antiguo 17/11/2011, 13:59
Avatar de Isidro  
Fecha de Ingreso: diciembre-2007
Ubicación: Alicante
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 3
sacar dos canciones de cada artista..

Artista
id Nombre
1 Juan
2 Pepe
...

Cancion
id Titulo artista
1 Titulo1 2
2 Titulo2 1
...

Como sería la query para sacar las 2 primeras canciones de cada artista?Alguien lo sabe? gracias.
__________________
Isidro
www.alicantediseñoweb.es
  #2 (permalink)  
Antiguo 17/11/2011, 14:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: sacar dos canciones de cada artista..

Hola Isidro:

Puedes simular una función ROW_NUMBER para enumerar las canciones para cada usuario y después filtrar sólo los primeros dos registros. Checa esta liga

http://forums.mysql.com/read.php?32,...665#msg-225665

Si tienes problemas para implementar la consulta publica lo que que intentaste hacer para tratar de ayudarte a afinarla.

Saludos
Leo.
  #3 (permalink)  
Antiguo 17/11/2011, 19:05
Avatar de Isidro  
Fecha de Ingreso: diciembre-2007
Ubicación: Alicante
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: sacar dos canciones de cada artista..

sigo sin saber cómo hacerlo la verdad... en una sola query se podría hacer?
__________________
Isidro
www.alicantediseñoweb.es
  #4 (permalink)  
Antiguo 17/11/2011, 19:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: sacar dos canciones de cada artista..

No con una consulta simple...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/11/2011, 09:23
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: sacar dos canciones de cada artista..

Cita:
Iniciado por Isidro Ver Mensaje
sigo sin saber cómo hacerlo la verdad... en una sola query se podría hacer?
Hola de nuevo:

¿Leiste la liga que te puse?... intentaste por lo menos hacer lo que ahí se expone??? te pedí que si tenías problemas para formular la consulta postearas lo que intentaste hacer, pero no lo hiciste... tal pareciera que estás esperando que lo hagamos por tí... Mucho ojo con eso.

Checa este script:


Código MySQL:
Ver original
  1. mysql> select * from cancion;
  2. +-----------+--------+-----------+
  3. | idCancion | titulo | idArtista |
  4. +-----------+--------+-----------+
  5. |         1 | uno    |         1 |
  6. |         2 | dos    |         1 |
  7. |         3 | tres   |         1 |
  8. |         4 | cuatro |         1 |
  9. |         5 | cinco  |         2 |
  10. |         6 | seis   |         2 |
  11. |         7 | siete  |         3 |
  12. |         8 | ocho   |         3 |
  13. |         9 | nueve  |         3 |
  14. +-----------+--------+-----------+
  15. 9 rows in set (0.11 sec)
  16.  
  17. mysql> SELECT T1.idArtista, T1.titulo,
  18.     -> FIND_IN_SET(T1.titulo ,
  19.     -> ( SELECT GROUP_CONCAT(titulo ORDER BY idCancion)
  20.     -> FROM cancion T2 WHERE T2.idArtista = T1.idArtista)
  21.     -> ) AS indice FROM cancion T1;
  22. +-----------+--------+--------+
  23. | idArtista | titulo | indice |
  24. +-----------+--------+--------+
  25. |         1 | uno    |      1 |
  26. |         1 | dos    |      2 |
  27. |         1 | tres   |      3 |
  28. |         1 | cuatro |      4 |
  29. |         2 | cinco  |      1 |
  30. |         2 | seis   |      2 |
  31. |         3 | siete  |      1 |
  32. |         3 | ocho   |      2 |
  33. |         3 | nueve  |      3 |
  34. +-----------+--------+--------+
  35. 9 rows in set (0.00 sec)

observa, el artista 1 tiene 4 canciones el artista 2 sólo tiene 2, y el artista 3 tiene 3. se creo una nueva columna indice la cual te enumera las canciones... LO UNICO QUE TIENES QUE HACER ES FILTRAR ESTA CONSULTA, para traer solo aquellos registros con indice 1 y 2... ¿Es muy difícil pedir que lo intentes? como indice es una columna calculada NO SE PUEDE UTILIZAR EN EL WHERE, pero puedes meter todo como una subconsulta.

Código:
Select * from (aqui pones la consulta) T
where (aqui pones la condición para filtrar)
para traer el nombre del artista, no su id simplemente haces un INNER JOIN con la tabla artistas.

INTÉNTALO por favor...

Saludos
Leo.
  #6 (permalink)  
Antiguo 21/11/2011, 08:13
Avatar de Isidro  
Fecha de Ingreso: diciembre-2007
Ubicación: Alicante
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: sacar dos canciones de cada artista..

gracias leonardo_josue por las molestias q te has tomado pero he probado la select esa que has puesto ahí con mi nombre de tablas y campos y me da error:

SELECT T1.fk_artista, T1.titulo, FIND_IN_SET( T1.titulo, (
SELECT GROUP_CONCAT( titulo
ORDER BY id )
FROM video T2
WHERE T2.fk_artista = T1.fk_artista )
) AS indice
FROM video T1

El caso que phpmyadmin me dice esto:
Mostrando registros 0 - 392 (393 total, La consulta tardó 0.0269 seg)
pero no llega a mostrar ningun registro
y luego da el error:

consulta SQL: Editar

SHOW KEYS FROM

MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
__________________
Isidro
www.alicantediseñoweb.es

Etiquetas: canciones, query
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 16:14.