Bonjour à vous !
Apparement je ne suis pas le seul à avoir du mal avec les jointures externes, mais je n'ai pas trouvé de solution à mon problème dans les messages précédents
Je dispose de deux tables : "rubrique" et "bloc" fonctionnant un peu sur le principe d'un forum.
- Rubrique contient un id_rubrique (clé primaire) et un id_parent (faisant référence à id_rubrique) indiquant si une rubrique est une sous-rubrique (si id_parent != 0) et dans ce cas, de quelle rubrique parent elle dépend.
- Bloc contient un id_rubrique selon la rubrique à laquelle elle appartient.
Je cherche à trouver pour toutes les rubriques, le nombre de sous rubrique (s'il y en a) ainsi que le nombre de blocs (s'il y en a) qui lui sont rattaché. J'utilise pour cela la requête suivante (sous MySQL) :
Mon problème est que les résultats des counts sont incohérents (apparement multipliés l'un par l'autre) lorsque le premier est différent de 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT r.id_rubrique, r.libelle, COUNT(r2.id_rubrique) AS nb_sous_rubriques, COUNT(b.id_bloc) AS nb_blocs FROM web_rubrique r LEFT JOIN web_rubrique r2 ON r.id_rubrique = r2.id_parent LEFT JOIN web_bloc b ON r.id_rubrique = b.id_rubrique WHERE r.id_parent = 0 GROUP BY r.id_rubrique, r.libelle
Pour être clair, au lieu d'obtenir pour une rubrique ayant 4 sous rubriques et 2 blocs soit :
1 | MonLibellé | 4 | 2
j'obtiens
1 | MonLibellé | 8 | 8
Quelqu'un peut-il m'expliquer comment se fait-ce ? et surtout que faire pour y remédier ?
Le but étant bien entendu de ne faire qu'une seule requête
Alors à vot' bon coeur m'sieur dame !
et Merci d'avance !
Partager