SQL - Sql recorrido todos los padres de una categoria

 
Vista:

Sql recorrido todos los padres de una categoria

Publicado por Gerard (2 intervenciones) el 08/03/2005 08:14:30
Tengo una tabla donde se guarda información de categorias y subcategorias, y otra donde se guardan productos, de forma que un producto pertenece a una categoria y una categoria puede tener muchas subcategorias, la pregunta es, dado un producto, como puedo sacar en sql la categoria a la que pertenece y todas sus categorias padre (con un bucle si que sale, pero usa demasiadas consultas a BD, lo ideal es hacerlo con una o dos) Muchisimas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sql recorrido todos los padres de una categoria

Publicado por Isaías Islas (5072 intervenciones) el 08/03/2005 22:32:08
Eso se llama RECURSIVIDAD, espero que este ejemplo de ULISES te sirva:

-- RECURSIVIDAD
create table tempo ( idclave int, descripcion char(10),
idpadre int )
go
insert into tempo values ( 1, 'AAA', 0 )
insert into tempo values ( 2, 'AAA', 1 )
insert into tempo values ( 3, 'AAA', 1 )
insert into tempo values ( 4, 'AAA', 2 )
insert into tempo values ( 5, 'AAA', 2 )
insert into tempo values ( 6, 'AAA', 4 )
go
create table tempodes ( iddes int, nivel int )
go

2) Grabamos en la tabla tempodes los descendientes del
parámetro solicitado (en eset caso lo pongo en una
variable):
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sql recorrido todos los padres de una categoria

Publicado por Isaías Islas (5072 intervenciones) el 08/03/2005 22:32:48
Segunda parte:

declare @param int
SET @param = 1

declare @nivel int
DELETE FROM tempodes
INSERT INTO tempodes SELECT idclave, 1 FROM tempo WHERE
idpadre = @param
SET @nivel = 2
WHILE ( EXISTS ( SELECT iddes FROM tempodes WHERE nivel =
@nivel - 1 ) )
BEGIN
INSERT INTO tempodes SELECT idclave, @nivel FROM tempo
WHERE idpadre IN ( SELECT iddes FROM tempodes WHERE nivel
= @nivel - 1 )
SET @nivel = @nivel + 1
END

3) Si vemos el detalle de la tabla con SELECT * FROM
tempodes tenemos :

iddes nivel
----------- -----------
2 1
3 1
4 2
5 2
6 3

4) Si deseamos que todo se encuentre en una cadena :

declare @cadena varchar(1000)
SET @cadena = ''
select @cadena = @cadena + convert(varchar,iddes) + ';'
from tempodes
select @cadena

tenemos :

----------
2;3;4;5;6;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sql recorrido todos los padres de una categoria

Publicado por Isaías Islas (5072 intervenciones) el 08/03/2005 22:32:49
Segunda parte:

declare @param int
SET @param = 1

declare @nivel int
DELETE FROM tempodes
INSERT INTO tempodes SELECT idclave, 1 FROM tempo WHERE
idpadre = @param
SET @nivel = 2
WHILE ( EXISTS ( SELECT iddes FROM tempodes WHERE nivel =
@nivel - 1 ) )
BEGIN
INSERT INTO tempodes SELECT idclave, @nivel FROM tempo
WHERE idpadre IN ( SELECT iddes FROM tempodes WHERE nivel
= @nivel - 1 )
SET @nivel = @nivel + 1
END

3) Si vemos el detalle de la tabla con SELECT * FROM
tempodes tenemos :

iddes nivel
----------- -----------
2 1
3 1
4 2
5 2
6 3

4) Si deseamos que todo se encuentre en una cadena :

declare @cadena varchar(1000)
SET @cadena = ''
select @cadena = @cadena + convert(varchar,iddes) + ';'
from tempodes
select @cadena

tenemos :

----------
2;3;4;5;6;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sql recorrido todos los padres de una categoria

Publicado por Gerard (2 intervenciones) el 09/03/2005 17:24:55
Muchisimas gracias Isaías espero que si me sirva, lo tengo que implementar en una pàgina web asp, ya t comentare que tal funciona, gracias :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar