Busqueda recursiva aditiva


([N1] Spicer) #1

Estimados,

Tengo un interesante desafío que exponeros. Dispongo de una tabla histórica que contiene dos columnas: Id_Origen y Id_Destino, en la cual grabo la evolución de ciertos registros en el tiempo. La relación entre ellos es muchos a muchos, sin restricción alguna, salvo que una combinación (Id_Origen ; Id_Destino) puede aparecer sólo una vez, pero un Id_Origen puede tener muchos Id_Destino y viceversa.

Pues bien, a partir de un Id_Destino, necesito obtener todos los Id que aparezcan vinculados con él, ya sea como su origen, o el origen de su origen, aguas arriba. Por ejemplo, si tengo estos datos:

Id_Origen - Id_Destino


11 - 14
14 - 29
14 - 35

Entonces, si mi Id_Destino es 35, quiero obtener una lista con los Ids (14 ; 29; 11), porque esos Ids son los que componen la cadena desde su origen primario.

Supongo que debiera hacer esto con alguna forma recursiva, quizá ocupando vJavaScript… a menos que alguno de mis queridos velneadores se le ocurra alguna forma limpia y elegante de hacer esto. Os quedaré por supuesto muy agradecido

Saludos,


([N1] wikan) #2

Si lo entendi bien, creo que con una simple búsqueda con dos componentes:
ID_ORIGEN => Todo el fichero => 14
ID DESTINO => Añadir => 14

Deberías obtener los registros que deseas.


([N1] Spicer) #3

Estimado manuel,

Muchas gracias por el comentario, pero la cantidad de números a buscar no siempre es la misma, por lo cual tendría que agregar dinámicamente componentes de búsqueda a partir de los datos de la tabla…

Saludos,


([N1] wikan) #4

Pero solo vas a buscar un destino a la vez?? En tu caso 35…

Siempre puedes tener un array con destinos, recorrer e ir lanzando la búsqueda y agregando a una cesta para mostrarla después.


([N4] innovadb) #5

Nosotros lo tenemos hecho desde antes de que v7 tuviera javascript, pero realmente no es un proceso recursivo, lo que hacemos es cargar plurales varias veces y si hay registros los añadimos a una cesta como dice Manuel.

Tiene los niveles de profundidad que le quieras dar, pero si tienes claro cuantos necesitas no debería ser un problema.

Lo peor es que el proceso queda muy largo, pero funciona perfectamente.

Un saludo