Rechercher : dans
Par :

Meilleur algo: arbre en profondeur et SQL

Dernière réponse le 10 jun 2004 à 20:36:14 Car0, le 10 jun 2004 à 19:31:40 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Meilleur algo: arbre en profondeur et SQL » dans :
Quel est le meilleur antivirus gratuit ? VoirLe choix d'un anti-virus reste une décision personnelle, en fonction des goûts de chacun. Voici ci-dessous une sélection des meilleurs antivirus gratuits. 1. Antivir Personal Edition 2. Avast Home 3. AVG 4. Et aussi... 4.1 Autres...
Quel est le meilleur anti-virus ? VoirC'est une question qui est très souvent posée dans le forum et les débats sont très souvent animés. Certains pensent que les meilleurs anti-virus sont ceux ci-dessous : ANTIVIR AVAST AVG Gdata Bit Defender
Sauvegarde automatique d'une BDD sous SQL EXPRESS 2005 VoirSi vous vous voulez automatiser une sauvegarde d'une base de données sous SQL server express, il existe une solution simple grâce à un fichier .bat. Créez un nouveau fichier texte. Ce fichier doit contenir les informations suivantes: SET...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...
PL/SQL - Introduction au langage PL/SQL VoirIntroduction au langage PL/SQL Le langage PL/SQL est un langage L4G (entendez par ce terme un langage de quatrième génération), fournissant une interface procédurale au SGBD Oracle. Le langage PL/SQL intègre parfaitement le langage SQL en lui...

1

kinder.surprise, le 10 jun 2004 à 20:05:22

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

Répondre à kinder.surprise

2

 Caro, le 10 jun 2004 à 20:36:14

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.)

Répondre à Caro
Collection CommentÇaMarche.net