Création
d'entreprise
Posez votre question Signaler

Meilleur algo: arbre en profondeur et SQL

Car0 - Dernière réponse le 10 juin 2004 à 20:36
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
Lire la suite 

Meilleur algo: arbre en profondeur et SQL »

2 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.)
Ajouter un commentaire
Ce document intitulé « Meilleur algo: arbre en profondeur et SQL » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?