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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part idtheme : titre : bornegauche : taille : niveau : idtheme_rel
La table qcm_questionnaire est du type :
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 idquestionnaire : titre : idtheme_rel : ...
Mon problème est de compter les questionnaires reliés à un thème de manière arborescente.
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
Lorsque j'utilise le terme relation directe cela veut dire :
Le terme relation arborescente prend en compte la récursivité dans l'arborescence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part qcm_theme.idtheme=qcm_questionnaire.idtheme_rel
Voici un exemple :
Merci d'avance pour votre aide.
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
Partager