Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2350 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Récupération des branches d'un arbre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupération des branches d'un arbre

n°1609303
BlopGirl
Posté le 07-09-2007 à 14:20:10  profilanswer
 

Bonjour,
J'ai une table dans laquelle est stockée la hiérarchie géographique de la façon suivante:
Table GEOGRAPHIE
------------------
Code Pere              Niveau Pere         Code Fils           Niveau Fils
1                                FR                  11                     REG
1                                FR                  12                     REG
11                              REG                 111                   DEP
11                              REG                 112                   DEP
12                              REG                 121                   DEP
111                            DEP                 1111                  VIL
111                            DEP                 1112                  VIL
112                            DEP                 1121                  VIL
121                            DEP                 1211                  VIL
121                            DEP                 1212                  VIL
121                            DEP                 1213                  VIL
 
sachant que les codes géographiques sont différents pour tous les éléments géographiques (par exemple 2 villes de 2 régions différentes ne peuvent avoir le même code tout comme une ville et une région ne peuvent avoir le même code)
 
On me passe un code géographique dont j'ignore le niveau (on peut aussi bien me passer la France qu'une région ou une ville) et il me faut récupérer tous ses ascendants et tous ses descendants mis en forme de la façon suivante:
Ex1 : on me passe le code 121
FR                         REG                   DEP                VIL
1                            12                    121                1211
1                            12                    121                1212
1                            12                    121                1213
 
Ex2 : on me passe le code 11
FR                         REG                   DEP                VIL
1                            11                    111                1111
1                            11                    111                1112
1                            11                    112                1121
 
Je travail en PL/SQL sur Oracle 10g.
 
Je sais qu'il existe une fonction connect by, mais je ne parvient pas à récuperer des branches entières, juste des segments de branche.
Pourriez-vous m'aider svp?

mood
Publicité
Posté le 07-09-2007 à 14:20:10  profilanswer
 

n°1609308
MagicBuzz
Posté le 07-09-2007 à 14:31:34  profilanswer
 

Ben tu prends une fourche et une brouette :spamafote:
 
Je vois pas ce qu'il te bloque avec connect by.
T'utilises bien la clause PRIOR au moins ?
 
Tu peux poster ta requête ?

n°1609311
BlopGirl
Posté le 07-09-2007 à 14:42:37  profilanswer
 

Ce qui me pose problème ce n'est pas de récupérer:
1
12
121
1211
1212
1213
Mais plutôt la mise en forme
 
Voici ma requête (probablement débile mais il y a 30 min je ne connaissais pas connect By et je ne suis pas persuadée de l'utiliser correctement)
 
SELECT DISTINCT Code_pere AS CODGEO, Niveau_pere AS NIV, LEVEL
FROM geographie
START WITH code_pere = :pGeo
CONNECT BY code_fils = PRIOR code_pere
UNION ALL  
SELECT DISTINCT code_fils AS CODGEO, Niveau_fils AS NIV, LEVEL
FROM geographie
START WITH code_pere = :pGeo
CONNECT BY PRIOR  code_fils = code_pere
 
 
Sinon merci pour les autres messages que tu as posté pour en aider d'autres, j'avoue qu'ils m'ont été également très utils

n°1609379
BlopGirl
Posté le 07-09-2007 à 16:14:39  profilanswer
 

Mais bien sur avec une auto jointure

n°1610000
MagicBuzz
Posté le 10-09-2007 à 11:58:49  profilanswer
 

A priori, ta requête est bonne.
Je rajouterais quand même un champ "virtuel" histoire de savoir de quelle partir de l'union vient les résultats.
 
Qu'est-ce qui ne va pas ?
 
Oracle ne va de toute façon pouvoir te récupérer les données que sous forme de 2 colonnes pere/fils.
Ensuite c'est à toi de faire la mise en forme via ton langage de programmation (C, PHP, etc.)
 
Le connect by te permet surtout de récupérer l'arboressence, donc tu filtres les lignes que tu ne veux pas, et grace à l'indication "level", t'as directement une information de profondeur. Mais ça ne fait pas tout non plus ;)

n°1614130
Profil sup​primé
Posté le 22-09-2007 à 19:01:03  answer
 

Utilise level que tu combines avec un rpad('..','..',level())
Ca te mettra deux points par niveau hiérarchique


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Récupération des branches d'un arbre

 

Sujets relatifs
Upload et récupération de fichierrecuperation du resultat d'une commande dans une variable
Textarea : Récupération OK - Envoi sur BDD ECHECRécupération de variables POST... pas si simple...
Créer une page de récupération de fichiersRécupération variable js avec mootools
Cas spécifique de récupération de données d'un formrecuperation resultat dans variable
[RESOLU]Récupération des données d'un fichier .txt[VBA-Excel] Construction d'un arbre d'appels
Plus de sujets relatifs à : Récupération des branches d'un arbre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR