[SQL] Menu à plusieurs niveaux, afficher les non vides
Posté : 21 oct. 2011, 00:53
Hello à tous!
Je suis en train de faire un menu. Mon menu est lier à une base de donnée. C'est un peu comme sur le siteduzero. Il y a les titres principaux, sous titre, sous-sous titre, etc..
Avant de coder, j'aimerais être sur que ma façon de faire est juste et qu'il n'y a pas plus simple. Ma table a les champs suivant: L'id, l'id du parent, le nom.
Le niveau de base à comme parent -1.
Je sais déjà comment afficher tout le niveau 3 par exemple:
Je pensais à quelque chose comment ça
Je suis sur la bonne voie?
Ma dernière requete affiche le menu. Comment puis-je faire pour que il y aie entre parenthèse le nombre d'article que contient le domaine (+ ces sous domaines).
Genre
1)niveau0 (6 articles)
---1)niveau2 (1 art)
---2)niveau2 (5 art)
------1)niveau3 (0 art) // donc on n'affiche pas ce menu
------2)niveau3 (5 art)
Merci beaucoup!
Je suis en train de faire un menu. Mon menu est lier à une base de donnée. C'est un peu comme sur le siteduzero. Il y a les titres principaux, sous titre, sous-sous titre, etc..
Avant de coder, j'aimerais être sur que ma façon de faire est juste et qu'il n'y a pas plus simple. Ma table a les champs suivant: L'id, l'id du parent, le nom.
Le niveau de base à comme parent -1.
Je sais déjà comment afficher tout le niveau 3 par exemple:
$query = $bdd->query('SELECT * FROM work_domaines WHERE dom_parent IN
(SELECT dom_id FROM work_domaines WHERE dom_parent IN
(SELECT dom_id FROM work_domaines WHERE dom_parent=-1))');
while ($donnees = $query->fetch()) {
echo $donnees['dom_name'].'<br />';
Je sais aussi comment procédé pour ajouté les domaines de niveau 2 (ou autre) d'un certain domaine:$query = $bdd->query('SELECT * FROM work_domaines WHERE dom_parent IN
(SELECT dom_id FROM work_domaines WHERE dom_parent=9)');
while ($donnees = $query->fetch()) {
echo 'niveau2 domain_id =9: '.$donnees['dom_name'].'<br />';
}
Quel est la meilleur façon de procéder pour afficher tout les niveaux et tout le menu?Je pensais à quelque chose comment ça
$query = $bdd->query('SELECT dom_id, dom_name FROM work_domaines WHERE dom_parent=-1');
while ($donnees = $query->fetch()) {
echo 'niveau1: '.$donnees['dom_name'].'<br />';
$query2 = $bdd->query('SELECT dom_id, dom_name FROM work_domaines WHERE dom_parent='.$donnees['dom_id']);
while ($donnees2 = $query2->fetch()) {
echo '---niveau2: '.$donnees2['dom_name'].'<br />';
$query3 = $bdd->query('SELECT dom_id, dom_name FROM work_domaines WHERE dom_parent='.$donnees2['dom_id']);
while ($donnees3 = $query3->fetch()) {
echo '------niveau3: '.$donnees3['dom_name'].'<br />';
$query4 = $bdd->query('SELECT dom_id, dom_name FROM work_domaines WHERE dom_parent='.$donnees3['dom_id']);
while ($donnees4 = $query4->fetch()) {
echo '----------niveau4: '.$donnees4['dom_name'].'<br />';
}
}
}
}
Que pensez vous de cette façon?Je suis sur la bonne voie?
Ma dernière requete affiche le menu. Comment puis-je faire pour que il y aie entre parenthèse le nombre d'article que contient le domaine (+ ces sous domaines).
Genre
1)niveau0 (6 articles)
---1)niveau2 (1 art)
---2)niveau2 (5 art)
------1)niveau3 (0 art) // donc on n'affiche pas ce menu
------2)niveau3 (5 art)
Merci beaucoup!