RAIZ
|
|->R1
|****** |->R1_H1
|*******|*** | ->R1_H1_SH1
|****** |->R1_H2
|*******|*** | ->R1_H2_SH1
|->R2
|->R2_H1
dado el ID del nodo (en color Rojo) me desglose todos los nodos (en color verde) hasta el ultimo nodo que estos tuvieran de tal modo que sin importar el id que me den desglose todo hasta ultimo nodo hijo que pendan de ese nodo.
mediante oracle ordenar los datos se hace de manera sencilla tenemos que ultizar lo metodos PRIOR, WITH y START
de tal modo que nuestra consulta oracle quedaria algo asi
Código:
DONDE:SELECT PUESTO_ID,PADRE_ID FROM PUESTOS START WITH PUESTO_ID = 'NODO INICIAL' CONNECT BY PRIOR PADRE_ID = PUESTO_ID;
START WITH -> Nos indica apartir de que nodo vamos a comenzar.
CONECT BY -> Nos establece en que columna vamos a buscar nuestros nodos padre.
PRIOR -> Indica el modo de recorrido del arbol de tal modo que en el codigo anterior es un recorrido de la siguente forma:
HOJA -> RAMA -> ARBOL
Que aplicado a nuestro esque anterior :
R1_H1_SH1 --> R1_H1--->R1
para hacer el recorrodo inverso solo basta con mover la instruccion PRIOR de lado de la siguente forma
Código:
y el recorrido sera asi:SELECT PUESTO_ID,PADRE_ID FROM PUESTOS START WITH PUESTO_ID = 'NODO INICIAL' CONNECT BY PADRE_ID = PRIOR PUESTO_ID;
ARBOL-->RAMA--> HOJA
R1---->R1_H1--->R1_H1_SH1
bueno así fue como lo solucionamos espero les sea de utilidad este pequeño aporte.