Foros del Web » Programando para Internet » ASP Clásico »

Encontrar la dimensión de departamentos

Estas en el tema de Encontrar la dimensión de departamentos en el foro de ASP Clásico en Foros del Web. Hola chic@s, a ver si me dan una idea con esto que no logro resolver, tengo un catálogo de "N" departamentos, la estructura de la ...
  #1 (permalink)  
Antiguo 21/10/2004, 20:57
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Encontrar la dimensión de departamentos

Hola chic@s, a ver si me dan una idea con esto que no logro resolver, tengo un catálogo de "N" departamentos, la estructura de la tabla sería así:

dept_id -> entero
parent_id -> entero
is_parent -> booleano
dept_name -> texto

El tema es que estoy creando una estructura de árbol en base a los siguientes datos, una muestra:

Código:
dept_id   |   parent_id   |   is_parent   |   dept_name
   1                   0                 1               Bebidas
   2                   0                 0               Alimentos
   3                   1                 1               Frias
   4                   1                 1               Calientes
   5                   3                 0               Refrescos
   6                   3                 0               Aguas Frescas
   7                   4                 1               Café
   8                   4                 0               Chocolate
Interpretando los resultados tenemos los siguientes datos:
Código:
Depto1
Bebidas
 -Frías
   -Refrescos
   -Aguas Frescas
 -Calientes
   -Café
     -SubDepartamento que podría ser "Americano"
   -Chocolate

Depto 2
Alimentos
  -Productos
Espero que hasta aqui se entienda...el campo is_parent determina si el departamento a su ves es padre, aunque sea hijo, formando todo esto, un catálogo N-dimensional.

La problemática consiste en que estoy haciendo el arbol por medio del recordset, donde en primera instancia traigo a los padres, es decir, que el campo parent_id esté en 0.

Ahora por cada uno de los padres, tengo que determinar cuantos hijos tiene, y por cada uno de los hijos cuantos hijos tiene este, y así hasta "N" generaciones, de tal manera que cuando no haya más hijos para cada padre, mostrará los productos...espero no haberlos mareado hasta aquí.

Tengo pues el primer Loop que genera a los padres, pero de ahí no se como hacer para determinar:
1.- Cuantos hijos tiene
2.- Por cada hijo, mostrar los nietos, y así recursivamente, hasta pasar al siguiente "jerarca" por llamar de alguna manera al padre que tiene 0.

Todo esto porque estoy implementando el arbol en javascript, pero no encuentro el modo de hacer las iteraciones particulares por cada hijo de una forma N-dimensional

Alguna idea??
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #2 (permalink)  
Antiguo 22/10/2004, 00:08
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 1 mes
Puntos: 0
U goldman me gustaria intentar
poder ayudarte, ¿podrias poner el codigo?
  #3 (permalink)  
Antiguo 22/10/2004, 11:36
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
No es que te hayas explicado mal pero... no entendí nada
__________________
...___...
  #4 (permalink)  
Antiguo 22/10/2004, 11:51
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
hice mi mejor esfuerzo por redactarlo claro

Bueno, vamos de nuevo, y a ver si me pueden ayudar porque me está volviendo loco...

- Esta tabla crea una estructura de departamentos
- Cada departamento puede tener sub-departamentos
- Cada sub-departamento puede tener sub-sub-departamenos
- Y así sucesivamente hasta "N" niveles dentro de una misma familia(departamento)

Ahora vamos a la parte funcional de la tabla:

dept_id -> id del departamento
parent_id -> El id del padre de este departamento, 0 para los departamentos raíz
is_parent -> si el departamento en cuestión tiene hijos(es padre)
dept_name -> NOmbre del departamento, esto es irrelevante

Ahora lo que necesito es mediante uno o varios ciclos, imprimirun arbol que está programado en javascript, no les pongo código de javascript porque es innecesario, solo nos confundiría más.

El problema radica en, mediante una o mas rutinas imprimir este árbol, y saber la densidad para cada uno de los departamentos padre, es decir, que imprima a sus hijos, nietos, bisnietos y en adelante, cuando termine con todo esto, pasar al siguiente jerarca que tiene un parent_id de 0, además de tener una forma de saber, a que departamento pertenece cada uno de los departamentos en cuestión, por ejemplo:

Bebidas
-Frías
-Refrescos
-Aguas Frescas

Saber en esta pasada que me encuentro en id's:
Código:
1
   5
Esto porque necesito pasarle estos valores al javascript.

Espero haber dejado un poco mas claro esto, y si alguien me puede tirar una idea será bienvenida.

sqa no pongo el código pues repito, solo nos confundiría más, adelanto que podría haber hecho un Loop que contenga "N" cantidad de Loops para este propósito, pero que siempre y necesariamente tendría que darle un número finito, p.e. 5, que aunque extensa la densidad del departamento, podría darse el caso en que fuera mayor.

Se me ocurre algo de recursividad también, aunque no se como implementarla, no se si me estoy complicando demasiado, por eso lo extenso del post, gracias a quienes se tomen la molestia para leerlo.


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 22/10/2004 a las 11:59
  #5 (permalink)  
Antiguo 22/10/2004, 13:52
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Ya entendí

Había visto otras maneras similares de hacerlo, pero me descolocó en tu ejemplo el campo "is_parent" para identificar un "jerarca"

Si te sirve modificar un poco la estructura de tu tabla, te paso un ejemplo que modifiqué un poquito del original:


La tabla tiene esta estructura

Código:
RecordID	ParentID	DisplayName
1		0		Bebidas
2		0		Alimentos
3		1		Frias
4		1		Calientes
5		3		Refrescos
6		2		Hamburgesa
7		4		Café
8		0		Otro Jerarca
9		3		Aguas Frescas
10		7		Irlandés
11		6		Completa
12		7		Americano

Y luego de ejecutar el procedimiento llegás a éste resultado:


Código:
Alimentos
    Hamburgesa
        Completa
Bebidas
    Calientes
        Café
            Americano
            Irlandés
    Frias
        Aguas Frescas
        Refrescos
Otro Jerarca


Código:
<%
Call DoTree(0,0)

'here we initially call the sub routine, we pass 0 as the parent ID 
'this will pull all top level parent (meaning they don't have an 'ancestor). 
'we also pass 0 for the level, this is used for spacing, or
'making the results appear threaded. 
'---------------------------------------------------------- 
Sub DoTree(ParentID, intLevel)
Set DBConn = Server.CreateObject("ADODB.Connection")
DBConn.Open var_cadena_de_conexion

Dim SQLQ, DBConn, rs, i
SQLQ = "SELECT RecordID, DisplayName FROM RECORDS " & _ 
      "WHERE ParentID = " & ParentID & " ORDER BY DisplayName ASC"
       Set rs = DBConn.Execute(SQLQ) 
       If Not rs.EOF Then 
           Do Until rs.EOF 
'                 Response.Write "<img src=Spacer.gif Width= " & _
'                 15 * intLevel & ">" 
                 Response.Write Replace(Space(intLevel), " ", "&nbsp;&nbsp;&nbsp;&nbsp;")
                 Response.Write rs("DisplayName") & "<br>" 
'now call the subroutine we're in to see if this value has 
'any children and increase the indent, and so on...     
                DoTree rs("RecordID"), intLevel + 1 
               rs.MoveNext 
           Loop 
       End If 
       rs.Close 
       Set rs = Nothing 

DBConn.Close 
Set DBConn= Nothing 

End Sub 
'------------------------------------------------------------ 
%>


Espero te sirva
Saludos y ssalú

PD: Me olvidé de colocar la fuente de donde lo obtuve: http://www.wwwcoder.com/main/parenti...8/default.aspx
__________________
...___...

Última edición por AlZuwaga; 22/10/2004 a las 13:54
  #6 (permalink)  
Antiguo 22/10/2004, 14:19
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98

Al rato les cuento como está el show.


Saluuuuuuuuuuuuuuuuuud! es viernes
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 14:17.