Pregunta orden de tabla

02/03/2005 - 14:25 por The Keymaker | Informe spam
Hola a todos... perdon por la molestia, quizas algun alma caritativa me
quiera ayudar...

Tengo una tabla jerarquizada de categorias y subcategorias LA CUAL NO PUEDO
CAMBIAR...

id_Categoria titulo depende_de
0 raiz 1
1 categ1 1
2 categ2 1
3 categ3 1
4 categ4 1
5 categ5 1
6 categ1.1 1
7 categ1.2 1
8 categ2.1 2
9 categ2.2 2
10 categ2.2.1 9


Cada categoria (salvo las raíces) depende de una anterior en la misma
tabla...
¿como puedo hacer a partir de esta tabla un arbol de categorias asi?

Categ1
Categ2
-Categ2.2.1
Categ3
Categ4
Categ5
Categ6
Categ7
Categ8
Categ9
Categ10

¡¡¡Mucho les agradecere su ayuda!!!

KM, desde Chile

Preguntas similare

Leer las respuestas

#1 Manuel Vera
02/03/2005 - 16:00 | Informe spam
Hola

Tengo lo mismo pero hecho para SQLServer usando Stored Procedures. Espero te
sirva.

Son 2 SP agrupados con el mismo nombre. El segundo es recursivo. Lo que hace
es crear una tabla temporal donde voy cargando los registros según van
apareciendo en la jerarquia del arbol. Puedes cargar desde el nivel 0, o
desde un nivel mas interno. Para mi caso, el nivel 0 es NULL, todos los
demás los lleno con su correspondiente código.

Limitación
No acepta niveles cuyo codigo sea superior a 999, es decir, solo maneja
codigos de tres cifras. Si en tu tabla tienes codigos de mas de tres cifras
debes modificar el codigo que te estoy enviando.

Ejemplos de llamada

spNivelCategr;1 NULL -- carga todos los niveles
spNivelCategr;1 33 -- niveles hijos del codigo 33

Salu2
MV




create proc spNivelCategr;1
@CodK integer
as
set nocount on
create table #NivK (
Codigo integer NOT NULL,
Descripcion varchar(50) NOT NULL,
Superior integer NULL,
Arbol varchar(12) NOT NULL
)
exec spNivelCategr;2 @CodK
select Codigo, Descripcion, Arbol from #NivK
go

create proc spNivelCategr;2
@CodK integer
as
set nocount on
declare @Codigo integer, @Descripcion varchar(50), @Superior integer
declare @Arbol varchar(12)
declare @cursor1 cursor
if @CodK is null
set @cursor1 = cursor for
select Codigo, Descripcion, Superior
from Categorias where Superior is null
order by Descripcion
else
set @cursor1 = cursor for
select Codigo, Descripcion, Superior
from Categorias where Superior = @CodK
order by Descripcion
open @cursor1
fetch next from @cursor1 into @Codigo, @Descripcion, @Superior
while @@fetch_status = 0
begin
if @CodK is null
insert into #NivK (Codigo, Descripcion, Superior, Arbol)
values (@Codigo, @Descripcion, @Superior,
right( "000" + cast( @Codigo as varchar(3) ) , 3 ) )
else
begin
set @Arbol = isnull( (SELECT Arbol FROM #NivK WHERE Codigo @Superior), '')
insert into #NivK (Codigo, Descripcion, Superior, Arbol)
values (@Codigo, @Descripcion, @Superior,
@Arbol + right( "000" + cast( @Codigo as varchar(3) ) , 3 ) )
end
exec spNivelCategr;2 @CodK = @Codigo
fetch next from @cursor1 into @Codigo, @Descripcion, @Superior
end
close @cursor1
deallocate @cursor1
go
Respuesta Responder a este mensaje
#2 The Keymaker
02/03/2005 - 17:03 | Informe spam
Cielos, no comprendo mucho el codigo de SP de SQL Server... intentaré
interpretarlo...

Manual, Gracias... si alguien tiene algo en ASP con que me pueda ayudar, se
lo agradeceré enormemente...

KM


"Manuel Vera" escribió en el mensaje
news:
Hola

Tengo lo mismo pero hecho para SQLServer usando Stored Procedures. Espero


te
sirva.

Son 2 SP agrupados con el mismo nombre. El segundo es recursivo. Lo que


hace
es crear una tabla temporal donde voy cargando los registros según van
apareciendo en la jerarquia del arbol. Puedes cargar desde el nivel 0, o
desde un nivel mas interno. Para mi caso, el nivel 0 es NULL, todos los
demás los lleno con su correspondiente código.

Limitación
No acepta niveles cuyo codigo sea superior a 999, es decir, solo maneja
codigos de tres cifras. Si en tu tabla tienes codigos de mas de tres


cifras
debes modificar el codigo que te estoy enviando.

Ejemplos de llamada

spNivelCategr;1 NULL -- carga todos los niveles
spNivelCategr;1 33 -- niveles hijos del codigo 33

Salu2
MV




create proc spNivelCategr;1
@CodK integer
as
set nocount on
create table #NivK (
Codigo integer NOT NULL,
Descripcion varchar(50) NOT NULL,
Superior integer NULL,
Arbol varchar(12) NOT NULL
)
exec spNivelCategr;2 @CodK
select Codigo, Descripcion, Arbol from #NivK
go

create proc spNivelCategr;2
@CodK integer
as
set nocount on
declare @Codigo integer, @Descripcion varchar(50), @Superior integer
declare @Arbol varchar(12)
declare @cursor1 cursor
if @CodK is null
set @cursor1 = cursor for
select Codigo, Descripcion, Superior
from Categorias where Superior is null
order by Descripcion
else
set @cursor1 = cursor for
select Codigo, Descripcion, Superior
from Categorias where Superior = @CodK
order by Descripcion
open @cursor1
fetch next from @cursor1 into @Codigo, @Descripcion, @Superior
while @@fetch_status = 0
begin
if @CodK is null
insert into #NivK (Codigo, Descripcion, Superior, Arbol)
values (@Codigo, @Descripcion, @Superior,
right( "000" + cast( @Codigo as varchar(3) ) , 3 ) )
else
begin
set @Arbol = isnull( (SELECT Arbol FROM #NivK WHERE Codigo > @Superior), '')
insert into #NivK (Codigo, Descripcion, Superior, Arbol)
values (@Codigo, @Descripcion, @Superior,
@Arbol + right( "000" + cast( @Codigo as varchar(3) ) , 3 ) )
end
exec spNivelCategr;2 @CodK = @Codigo
fetch next from @cursor1 into @Codigo, @Descripcion, @Superior
end
close @cursor1
deallocate @cursor1
go


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida