Bonjour à tous et toutes,
Si vous ne connaissez pas la gestion d'arbre par représentation intervallaire, ne vous embêtez pas avec ce post.
http://sqlpro.developpez.com/cours/arborescence/
Mais ceux qui maîtrisent cet excellent système et qui ont lu le non moins excellent article de Frédéric Brouard, peuvent peut-être m'apporter leurs lumières.
Je construis une FAQ avec des catégories qui peuvent avoir autant de sous catégories que ce que désire le user. D'où l'emploi de la méthode intervallaire.
Mais, cerise sur le gâteau, je veux permettre au user d'ordonner les catégories, que ce soit les parents (par rapport aux autres parents) ou les filles (par rapport aux autres filles sous leur parent).
Voici la table exemple des catégories de FAQ :
J'ai donc ajouté une colonne "poids".
Les catégories parent sont repérables puisque id_pere est à 0.
Prenons l'exemple de la catégorie "Navigation" (id 2) : elle a les enfants 3 et 4 et on voit que 3 a lui-même deux enfants : 12 et 13. Ok.
Maintenant regardons l'ordre (poids) :
La catégorie 2 est la 3ème des catégories parents : ça roule.
La 4 est le 1er de ses 2 enfants et la 3 le 2ème.
La 13 est le 1er enfant de la 3 et la 12 le 2ème.
Tout cela est bien joli, mais je coince sur l'affichage final des catégories :
Voici les requêtes :
Le problème c'est le ORDER BY. Si je fais BY lft (bord gauche), j'affiche bien les enfants groupés sous leurs parents (c'est le but), mais le poids est ignoré et j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $sql = mysql_query("SELECT * FROM faq_cat where id != '1' AND id_pere = '0' ORDER BY poids"); // ramasse les parents while($row = mysql_fetch_assoc($sql)){ $sc = mysql_query("SELECT * FROM faq_cat WHERE lft > '".$row['lft']."' AND rgt < '".$row['rgt']."' ORDER BY lft,poids"); //ramasse tous les enfants de chaque parent }
Si je fais BY poids, ça va pas non plus, les enfants de la 3 sont ventilés, ce qui est logique :Navigation dans les articles
Avec Firefox
Avec Internet Explorer
Navigation dans le plan du site
Et si je fais, comme ici, BY lft, poids :Navigation dans le plan du site
Avec Internet Explorer
Navigation dans les articles
Avec Firefox
C'est idem que le 1 : la hiérarchie n'est plus respectée.Navigation dans les articles
Avec Firefox
Avec Internet Explorer
Navigation dans le plan du site
Alors ma question est : comment je peux organiser tout ça pour obtenir, dans ce cas :
Je peux ajouter des colonnes, créer d'autres tables, modifier la gestion des poids...mais je ne trouve pas l'algo de requête de recherche.Navigation dans le plan du site
Navigation dans les articles
Avec Internet Explorer
Avec Firefox
Voila. Je ne m'attends pas à ce que ce post reçoive beaucoup de réponses, mais si un pro des arbres intervallaires passe par là, et bien je le remercie de s'arrêter un moment...
Partager