Récupération des branches d'un arbre - SQL/NoSQL - Programmation
Marsh Posté le 07-09-2007 à 14:31:34
Ben tu prends une fourche et une brouette
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 ?
Marsh Posté le 07-09-2007 à 14:42:37
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 = Geo
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 = Geo
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
Marsh Posté le 10-09-2007 à 11:58:49
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
Marsh Posté le 22-09-2007 à 19:01:03
Utilise level que tu combines avec un rpad('..','..',level())
Ca te mettra deux points par niveau hiérarchique
Marsh Posté le 07-09-2007 à 14:20:10
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?