Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Sql Recursiva misma tabla

Estas en el tema de Sql Recursiva misma tabla en el foro de Mysql en Foros del Web. Comuneros: Necesito devolver los ID de una tabla siendo el Id_PADRE = 7 . tengo: ID ---- ID_PADRE 7 ---- 0 4 ---- 7 3 ...
  #1 (permalink)  
Antiguo 01/09/2008, 16:15
Avatar de skatomundo  
Fecha de Ingreso: junio-2002
Ubicación: Santiago - CL
Mensajes: 2.532
Antigüedad: 21 años, 9 meses
Puntos: 125
Exclamación Sql Recursiva misma tabla

Comuneros:

Necesito devolver los ID de una tabla siendo el Id_PADRE = 7.

tengo:

ID ---- ID_PADRE
7 ---- 0
4 ---- 7
3 ---- 7
1 ---- 7
------------------------------
17 ---- 4
18 ---- 4
------------------------------
14 ---- 17

en este caso tengo 3 niveles:

nivel 1: -> 4; 3; 1
nivel 2: -> 17; 18
nivel 3: -> 14


si se dan cuenta consulto por el ID_PADRE = 7, obteniendo los ID 4, 3 y 1. Luego el ID 4 tiene hijos que son 17 y 18 y finalmente ID 17 tiene como hijo ID 14.

Necesito poder devolver todos los ID hijos recursivamente..

alguna sugerencia.
  #2 (permalink)  
Antiguo 01/09/2008, 16:22
Avatar de skatomundo  
Fecha de Ingreso: junio-2002
Ubicación: Santiago - CL
Mensajes: 2.532
Antigüedad: 21 años, 9 meses
Puntos: 125
Respuesta: Sql Recursiva misma tabla

Reading:

http://dev.mysql.com/tech-resources/...ical-data.html

..
  #3 (permalink)  
Antiguo 01/09/2008, 17:06
Avatar de skatomundo  
Fecha de Ingreso: junio-2002
Ubicación: Santiago - CL
Mensajes: 2.532
Antigüedad: 21 años, 9 meses
Puntos: 125
Respuesta: Sql Recursiva misma tabla

Bueno, he leido obtuve resultados, haciendo como indican la consulta:

* definiendo niveles y LEFT JOIN para cada nivel que defino.

finalmente, lo que hice fue una función en la que paso como parámetro "n_niveles" --> número de niveles según desee y luego querys anidadas. Haciendo un FOR y concatenando la cantidad de IN (SELECT ...).

siendo ejemplo:

Código:
SELECT id_causa FROM j_causa 
WHERE 
id_causa_padre = 7 OR id_causa_padre IN 
               (SELECT id_causa FROM j_causa WHERE id_causa_padre = 7 OR id_causa_padre
                       IN(SELECT id_causa FROM j_causa WHERE id_causa_padre = '7'))
en este caso hice 2 anidaciones, de tal manera que puedo llegar hasta 2 niveles de recursividad.

saludos,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:30.