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

count y left join y where

Estas en el tema de count y left join y where en el foro de Mysql en Foros del Web. hola buen dia queria pedirle una ayuda: quiero saber la cantida de canciones de un artista de un genero: para lo cual tengo 2 tablas ...
  #1 (permalink)  
Antiguo 06/06/2014, 00:01
 
Fecha de Ingreso: agosto-2010
Ubicación: peru
Mensajes: 115
Antigüedad: 14 años, 3 meses
Puntos: 0
count y left join y where

hola buen dia
queria pedirle una ayuda:
quiero saber la cantida de canciones de un artista de un genero:
para lo cual tengo 2 tablas artistas y canciones

-----------------
artistas
-----------------
id
genero
artista
------------------

id genero artista
1 bachata alma encendida


----------------
canciones
---------------------
genero
artista
cancion


id genero artista cancion
1 bachata alma encendida confesion escrita
2 bachata alma encendida gracias a todos
3 bachata alma encendida kathy
4 bachata alma encendida la consulta
5 bachata alma encendida mi dependencia
6 bachata alma encendida no puedo
7 bachata alma encendida por siempre
8 bachata alma encendida si tu te vas
9 bachata alma encendida si tu te vasbalada
10 bachata alma encendida traicion
11 bachata alma encendida una oportunidad
12 bachata alma encendida castio eterno

hago la siguiente conculta pero demora mucho y satura el mysql
Código PHP:
 SELECT artistas. * , COUNT'canciones.arista' ) AS total_com
FROM artistas
LEFT JOIN canciones ON artistas
.artista canciones.artista
WHERE artistas
.genero 'bachata'
GROUP BY artistas.artista 

por favor ayudeme a mejorar ese codigo que la respuesta del mysql se rapidisima
  #2 (permalink)  
Antiguo 06/06/2014, 00:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: count y left join y where

Primero, tienes un error de diseño, en la tabla canciones debes cambiar el campo artista por el campo id_artista y guardar en el el identificador del artista no el nombre.

El campo genero en las dos tablas puede ser abiguo, un artista puede interpretar varios generos una canción es mas dificil. El genero del artista será el mayoritario de sus canciones tu sabras si es lo que quieres. Lo mas simple es que el genero este solo en las canciones.

La tabla Canciones no tiene identificador podria ser el campo canción pero ojo que nada te asegura que no existan dos canciones con el mismo titulo, luego tendrias que usar un PK compuesta, cancion e id_artista.


-----------------
artistas
-----------------
id_artistas PK autoinc
genero
artista
------------------


----------------
canciones
---------------------
id_canciones PK autoinc
genero
id_artistas
cancion

(ademas crearia un indice unico compuesto canción, id_artista)

Esto cuenta TODAS las canciones de los artista de genero 'bachata'

Código MySQL:
Ver original
  1. SELECT artista , COUNT(id_canciones) AS total_com
  2. FROM artistas INNER JOIN canciones ON artistas.id_artistas = canciones.id_artistas
  3. WHERE artistas.genero = 'bachata'
  4. GROUP BY artistas.id_artistas;

Esto cuenta las canciones de genero 'bachata' de TODOS los artistas

Código MySQL:
Ver original
  1. SELECT artista , COUNT(id_canciones) AS total_com
  2. FROM artistas LEFT JOIN canciones ON artistas.id_artistas = canciones.id_artistas
  3. WHERE canciones.genero = 'bachata'
  4. GROUP BY artistas.id_artistas;

Esta.....

Código MySQL:
Ver original
  1. SELECT artista ,
  2. IFNULL(SUM(if(canciones.genero= 'bachata',1,0),0) total_bachata,
  3. IFNULL(SUM(if(canciones.genero= 'bachata',0,1),0) total_otros
  4. FROM artistas INNER JOIN canciones ON artistas.id_artistas = canciones.id_artistas
  5. GROUP BY artistas.id_artistas;

Tambien faltaria una tabla generos

generos

id_generos PK autoinc
genero


artistas
id_artistas PK autoinc
id_generos
artista



canciones
id_canciones PK autoinc
id_generos
id_artistas
cancion
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: mysql+consulta, php
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 14:02.