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

Left Join muestra solo un campo sin coincidencia al agrupar

Estas en el tema de Left Join muestra solo un campo sin coincidencia al agrupar en el foro de Mysql en Foros del Web. Hola gente, hace mas un año que vengo con este problema y no se como resolverlo. Espero que algún iluminado pueda ayudarme. Tengo una consulta ...
  #1 (permalink)  
Antiguo 20/10/2010, 15:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 110
Antigüedad: 16 años, 4 meses
Puntos: 1
Left Join muestra solo un campo sin coincidencia al agrupar

Hola gente, hace mas un año que vengo con este problema y no se como resolverlo. Espero que algún iluminado pueda ayudarme.

Tengo una consulta que me debería mostrar un resultado como este:

CANCION_MP3 TOTAL_REPRODUCCIONES
pepe_y_la_sonora 10
pinocho_parlanchin 9
panamerikano_hitt 3
ethiopia_roots_reg 2
el_loco_perry_craz 0
dub_reggae_skaaa 0
felipe_y_los_dados 0
etc_etc_etc_etc_et 0



Pero muestra esto:
CANCION_MP3 TOTAL_REPRODUCCIONES
pepe_y_la_sonora 10
pinocho_parlanchin 9
panamerikano_hitt 3
ethiopia_roots_reg 2
el_loco_perry_craz 0


Si yo reproduzco "el_loco_perry_craz", osea, inserto una registro en la tabla que contabiliza las reproducciones, ahora la consulta muestra esto:

CANCION_MP3 TOTAL_REPRODUCCIONES
pepe_y_la_sonora 10
pinocho_parlanchin 9
panamerikano_hitt 3
ethiopia_roots_reg 2
el_loco_perry_craz 1
dub_reggae_skaaa 0


Osea, siempre me muestra solo una cancion con cero reproducciones, y no todas las canciones que tienen 0 reproduciones


La consulta es esta:

SELECT mp3.nombre AS nombre, mp3.mp3_id AS mp3_id, count( reproducciones.mp3_id ) AS cantidad
FROM mp3
LEFT JOIN reproducciones ON ( mp3.mp3_id = reproducciones.mp3_id )
WHERE mp3.banda_id='$banda_id'
GROUP BY reproducciones.mp3_id
ORDER BY cantidad DESC



Desde ya, si alguien tiene alguna idea de por donde mirar, se lo agradezco de corazón.


Gracias y bendiciones!
  #2 (permalink)  
Antiguo 20/10/2010, 16:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Left Join muestra solo un campo sin coincidencia al agrupar

Debes agrupar por mp3.mp3_id y usar IFNULL para conseguir los ceros

SELECT mp3.nombre AS nombre, mp3.mp3_id AS mp3_id, IFNULL(count( reproducciones.mp3_id ),0) cantidad
FROM mp3
LEFT JOIN reproducciones ON ( mp3.mp3_id = reproducciones.mp3_id )
WHERE mp3.banda_id='$banda_id'
GROUP BY mp3.mp3_id
ORDER BY cantidad DESC
  #3 (permalink)  
Antiguo 21/10/2010, 18:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 110
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Left Join muestra solo un campo sin coincidencia al agrupar

Primero agregué el IFNULL y me dio error de sintaxis. Recordé que había estado toqueteando la consulta. Entonces confié en vos y hice un copy paste de tu consulta. Y maravillosamente aparecieron todas las canciones con 0 reproducciones.

Antes de subirlo por FTP te quería decir que no se como agradecerte.

Bendiciones!
  #4 (permalink)  
Antiguo 28/10/2010, 10:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Left Join muestra solo un campo sin coincidencia al agrupar

GstavoDeLanus,
me alegro mucho. Fíjate en que tu problema era que agrupabas por
reproducciones.mp3_id
en lugar de hacerlo por
mp3.mp3_id

Al hacerlo por la tabla reproducciones, sólo agrupaba por los mp3_id presentes en ella, que no son todos, y eso evitaba la aparición de los nulos a los que aplicada la función IFNULL podías sacar los ceros que querías.

Saludos

Etiquetas: agrupar, join, left, muestra, campos
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:56.