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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
qcm_theme.idtheme=qcm_questionnaire.idtheme_rel
Le terme relation arborescente prend en compte la récursivité dans l'arborescence.

Voici un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.