[MySQL] Arborescence intervallaire et relation
Bonjour,
Dans un site stockant des questionnaires à choix multiples, j'utilise la méthode des arborescences intervalaires pour représenter une arborescence de thème (ou catégorie si vous préférez). Une seconde table liste les questionnaires avec un champ idtheme_rel.
La table qcm_theme est du type :
Code:
idtheme : titre : bornegauche : taille : niveau : idtheme_rel
Je met à jour les valeurs des champs niveau, taille et bornegauche par l'intermédiaire d'une script PHP. La borne droite se calcule par bornegauche + taille.
La table qcm_questionnaire est du type :
Code:
idquestionnaire : titre : idtheme_rel : ...
J'arrive à faire une requete pour compter le nombre de fils directs ou arborescents d'un theme ainsi que le nombre de questionnaires directs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| // Themes avec nombre de fils arborecents et directs :
SELECT T1.*, IF(T1.taille<>1,COUNT(*),0) AS nombrefils_arbo, SUM(T1.idtheme=T2.idtheme_rel) AS nombrefils_direct
FROM qcm_theme AS T1 LEFT JOIN qcm_theme AS T2 ON T2.bornegauche>T1.bornegauche AND T2.bornegauche + T2.taille<T1.bornegauche + T1.taille
WHERE T1.visible=1 AND (T2.visible=1 OR T2.visible IS NULL)
GROUP BY T1.idtheme
ORDER BY `T1`.`bornegauche` ASC
// Themes avec nombre de questionnaires directs :
SELECT T1.*, SUM(IF(T2.visible=1,1,0)) AS nbrquestionnaire_direct
FROM qcm_theme AS T1 LEFT JOIN qcm_questionnaire AS T2 ON T1.idtheme=T2.idtheme_rel
WHERE T1.visible=1 AND (T2.visible=1 OR T2.visible IS NULL) GROUP BY T1.idtheme
ORDER BY `T1`.`bornegauche` ASC |
Mon problème est de compter les questionnaires reliés à un thème de manière arborescente.
Lorsque j'utilise le terme relation directe cela veut dire :
Code:
qcm_theme.idtheme=qcm_questionnaire.idtheme_rel
Le terme relation arborescente prend en compte la récursivité dans l'arborescence.
Voici un exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Table qcm_theme simplifiée :
idtheme : titre : bornegauche : taille : niveau : idtheme_rel
1 : a : 1 : 5 : 1 : 0
2 : a1 : 2 : 3 : 2 : 1
3 : a11 : 3 : 1 : 3 : 2
Table qcm_questionnaire simplifiée :
idquestionnaire : titre : idtheme_rel
1: b : 2
2 : bb : 2
3 : c : 3
4 : cc : 3
Dans ce cas je cherche à obtenir un tableau du style :
idtheme : titre : nbquestionnaire_arbo : nbquestionnaire_direct
1 : a : 4 : 0
2 : a1 : 4 : 2
3 : a11 : 2 : 2 |
Merci d'avance pour votre aide.