SET NOCOUNT ON
DECLARE @level int, @line int
CREATE TABLE #tree (ID_Key int)
CREATE TABLE #stack (item int, lev int)
INSERT INTO #stack VALUES (@ID, 1)
SELECT @level = 1
WHILE @level > 0
BEGIN
IF EXISTS (SELECT * FROM #stack WHERE lev = @level)
BEGIN
SELECT @ID = item
FROM #stack
WHERE lev = @level
DELETE FROM #stack
WHERE lev = @level
AND item = @ID
INSERT #stack
SELECT ParentIndex, @level + 1
FROM base
WHERE IDKey = @ID
INSERT #tree VALUES (@ID)
-- SELECT IDKey, ItemName
-- FROM base
-- WHERE IDKey = @ID
IF @@ROWCOUNT > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END
структура дерева
можно ли одним запросом к базе выбрать всех потомков с неограниченной вложенностью? или прийдётся уже средставми языка программирования выбирать для каждого из потомков его потомков и т. д.?
Цитата: Mr.Hacker
есть у меня простейшая база со структурой id, val, parent.. соответственно в поле parent содержится id родительского элемента.. из этой же таблицы...
можно ли одним запросом к базе выбрать всех потомков с неограниченной вложенностью? или прийдётся уже средставми языка программирования выбирать для каждого из потомков его потомков и т. д.?
можно ли одним запросом к базе выбрать всех потомков с неограниченной вложенностью? или прийдётся уже средставми языка программирования выбирать для каждого из потомков его потомков и т. д.?
СУБД какая?
под MS SQL Server 2000
Код:
правда она ищет с низу вверх... т.е. находит всю цепочку родителей от подчиненного
вот статейка
а, да, забыл сказать.. субд MySQL.. но за код спасибо... в mysql вроде можно такое же сделать