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) :

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
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.
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 !