no save
Assistance
Achat
News

Forum | programmation
Meilleur algo: arbre en profondeur et SQL
Car0, le jeu. 10 juin 2004 à 19:31:40
Bonjour!

J'ai une table qui représente plusieurs arbres n-aire ainsi (idparent=0 représente la racine de l'arbre) :
id idparent titre (string quelconque)
1 0 A
2 0 B
3 1 A1
4 1 A2
5 0 C
6 3 A11
7 2 B1
8 4 A21
9 2 B2
10 4 A22

J'aimerais obtenir tous les noeuds par ordre de profondeur. C'est à dire:
id: 1, 3, 6, 4, 8, 10, 2, 7, 9, 5

Évidemment, ça ne s'obtient pas simplement par une simple clause ORDER BY en SQL (dommage tient :).
J'ai quelques solutions possibles. Je me demande si quelqu'un n'en verra pas une meilleure ou laquelle retenir/oublier... Avis / suggestion / expertise sur la performance et simple commentaire sont les bienvenues! :)

1-Faire un SELECT * ... ORDER BY id et reconstruire l'arbre par script
2-Ajouter des champs dans la table (rend le ORDER BY très simple mais complique le INSERT INTO car il faut maintenir ces champs). Problème aussi parce que la profondeur de l'arbre n'est pas limité.
3-Faire plusieurs requêtes (fonction récursive).
ex:
function ecrireNoeud($id)
str="SELECT ... WHERE idparent=$id"
exécuter str
while (resultset not EOF)
ecrire titre du noeud
ecrireNoeud(id du noeud)
next ligne
wend
end function
A l'air simple mais pas trop efficace je pense : l'affichage de l'arbre est l'action la plus souvent réalisée
4-Utiliser des procédures stockées ou des SELECT imbriguées pour obtenir un recordset déjà dans le bon ordre

(? j'aimerais assez pouvoir faire ça mais j'en suis encore à chercher si c'est possible et comment faire si oui.)

Merci bien!
Caro


kinder.surprise
juin 04
Suivant
REPONSES
kinder.surprise
juin 04
Caro
juin 04
Version Web
Réalisé par RedShift
no save