Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/06/2014, 00:59
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
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.