Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ADO
 Select para montar un arbol.
 Foro Bloqueado  Tema Bloqueado


Autor Temas
asharak
Junior Member


210 Posts
Mensajes - 08 Mar 2002 :  15:24:18  Ver Perfil  Enviar Email  Enviar asharak un Mensaje Yahoo!
Hola a todos
Tengo una tabla asi:

ARBOL
ID (autonumerico) clave primaria
ID_PADRE (Entero Largo)
DATO (Texto)

El campo ID padre es clave foranea de la misma tabla, es decir, se trata de un arbol de datos en el que un elemento es dependiente de otro a traves de este campo.

Estoy dandole vueltas a como hacer la select pero no lo consigo...

Se trata de obtener los registros ordenados de tal forma que recorriendolos pueda montar un arbol ... como el que aparece en la siguente pagina de foros:
http://www.aspfacil.com/foros/aspavanzado.asp


Muchas gracias, es importante :)

asharak

aalaiz
Junior Member

España
374 Posts
Posted - 08 Mar 2002 :  17:14:08  Ver perfil  Enviar e-mail
Hola:

Me parece recordar que, por cada nodo debes tener, además de su identidad, un enlace al nodo anterior y otro al siguiente. Te faltaría un campo ID_HIJO.

De todos modos, y para ir más rápidos ¿no lo tendrás ya hecho en los ejemplos de foros: http://www.asptutor.com/aplicaciones.asp?idcategoria=7&categoria=Foros#link ?

Suerte. Saludos.

Inicio Pagina

asharak
Junior Member


210 Posts
Posted - 08 Mar 2002 :  17:53:56  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Como cada nodo puede tener mas de un nodo hijo, este campo (ID_HIJO) no es necesario ni posible ...

En realidad no quiero hacer un foro, puse el ejemplo del foro solo para que vierais como quiero ordenar los resultados, de todas formas mirare el enlace que me indicas, muchas gracias ;)

cualquier aportacion me es util, pq aun no lo tengo resuelto

Gracias ;)

asharakInicio Pagina

nicolas
New Member

España
74 Posts
Posted - 13 Jul 2002 :  18:12:50  Ver perfil  Enviar e-mail
Bueno,pues siguiendo la metafora de unos foros, y con tu tabla (sólo guardando el id_padre), no pudes resolverlo de una tacada; tendrías que montarte una función recursiva en que para cada registro que recorras, mires si el id es id_padre de otros registros, volver a llamar a la función psandole ese id, y así sucesivamente. Ocurre que esto sera muy lento a la que tengas muchos registros con muchos nodos.

Otra cosa mucho más eficiente y sin necesidad de exploraciones recursivas, es:

En tu tabla añades un campo que se llame 'ruta', en que inicialmente guardas el id; este sería un nodo de primer nivel; cuando respondas a esta pregunta, en el nuevo registro guardas el id del padre y concatenas (por ejemplo separado de un punto) el id del hijo; la pinta sería esta:

id padre ruta
0001 0001.
0002 0001 0001.0002
0003 0001 0001.0003
0004 0003 0001.0003.0004
...
0020 0020.

también es de utilidad que guardes el número de hijos que tiene un padre; todo esto complica un poco las inserciones, pero para montar el árbol sólo tienes que hacer una SELECT que recorra ordenado por 'ruta' e indentar el resultado (por ejemplo) por nivel de nodo, es decir por el número de '.' que tienes en 'ruta'.

Nicolás Sánchez Ruiz
ESI BarcelonaInicio Pagina

asharak
Junior Member


210 Posts
Posted - 13 Jul 2002 :  23:32:32  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Hola Nicolas!!
gracias por tu respuesta, consegui hacer una funcion recursiva que resolvia el problema, pero como dices, supongo que sera muy lenta cuando tenga muchos registros en la tabla ...

En este mensaje:
http://www.asptutor.com/foros/topic.asp?TOPIC_ID=1925&FORUM_ID=10&CAT_ID=2
puse el pseudo-codigo de esta funcion.

Probablemente la forma que tu planteas sea mas eficiente que la funcion recursiva, ademas, teniendo en cuenta que es necesario que los datos se muestren rapido, y que el hecho de que la insercion sea mas lenta o mas dificil no me preocupa, creo que tu opcion puede serme muy util, cuando la pruebe te comento.

Muchas gracias ;)

asharakInicio Pagina

   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar