Meilleur algo: arbre en profondeur et SQL

Car0 -  
 Caro -
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
A voir également:

2 réponses

Utilisateur anonyme
 
salut,

je ne sais pas si ton arbre va contenir beaucoup d'items et si les opérations les plus nombreuses vont être des sélections ou des ajouts/suppressions.

mais il y a une chose intéressante, si c'est surtout de la sélection ou, si ajout/suppression il y a, l'arbre est assez petit pour supporter cette façon de faire

personnellement je la trouve très intéressante dans certains cas, c'est la représentation intervallaire

mets tes lunettes de soleil, Brouard est excellent en SQL mais sûrement un peu daltonien

http://sqlpro.developpez.com/Tree/SQL_tree.html

kinder.surprise,
caractère banane
0
Caro
 
L'arbre peut contenir effectivement beaucoup d'items (j'estime dans les 2, 3 milles en moyenne). Le SELECT est de beaucoup l'opération la plus utilisée. INSERT sera "assez utilisé" (disons 1 INSERT pour 20 SELECT...) et DELETE très très peu.

Génial, je vais lire ton article :-) L'intro me semble très prometteuse. Merci.

Caro
(ouahhou.. lol. j'viens comprendre à quoi serve les lunettes de soleil.)
0