8722 sujets

Développement web côté serveur, CMS

Bonjour,

je m'excuse par avance, je ne suis probablement pas assez calé pour mon petit soucis de requête et probablement trop flou.
je vais tenter de l'expliquer en espérant être clair

Soit Table 1 : Chanson
on y retrouve chanson.id et chanson.nom
par exemple :
1 ; Tata Yoyo
2 ; Big Bisou
3 ; Sous les tropiques

Soit Table 2 : date_concert
On y retrouve date_concert.id et date_concert.année
par exemple :
1 ; 2010
2 ; 2015
3 ; 2010

Soit Table 3 : Chanson_en_concert
on y retrouve Chanson_en_concert.id ; Chanson_en_concert.id_chanson ; Chanson_en_concert.id_date_concert

par exemple
1 ; 1 ; 1 -> donc le premier id de la table c'est l'id de Tata Yoyo pour un concert de 2010
2 ; 1 ; 3 -> on retrouve Tata Yoyo pour un autre concert de 2010
3 ; 2 ; 2 -> là c'est Big Bisou sur un concert id de 2015


Mon souhait en sortie est d'avoir un tableau avec toute les chansons disponible de la table 1 et toutes les années disponible sur le table 3, puis la somme de nombre de fois d'une chanson pour l'année correspondante selon les liens de la table 2. Il me faut les 0 pour que je puisse parfaitement sortir mon tableau global

Avec mon exemple débile, j'aimerai avoir en sortie

Tata Yoyo ; 2010 ; 2
Tata Yoyo ; 2015 ; 0
Big Bisou ; 2010 ; 1
Big Bisou ; 2015 ; 0
Sous les tropique ; 2010 ; 0
Sous les tropique ; 2015 ; 0

j'ai beau essayer avec des INNER, des LEFT JOIN, je ne comprends rien Smiley decu
Pour le moment, je fais un compte par année pour chaque chanson. Ayant 200 titres, 13 année, c'est 2 600 requêtes. C'est probablement optimisable en bien moins de requêtes

je remercie par avance l'âme charitable.
Bonjour,
la requête devrait ressembler à ça:

SELECT cc.id_chanson, cc.id_date_concert, MAX(c.nom) AS chanson, MAX(d.annee) AS annee, count(*) AS nombre FROM Chanson AS c
LEFT JOIN Chanson_en_concert AS cc ON cc.id_chanson = c.id
LEFT JOIN date_concert AS d ON d.id = cc.id_date_concert
GROUP BY cc.id_date_concert, cc.id_chanson
ORDER BY cc.id_date_concert


Avec 'année' sans accents.