Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

структура дерева

271
27 февраля 2008 года
MrXaK
721 / / 31.12.2002
есть у меня простейшая база со структурой id, val, parent.. соответственно в поле parent содержится id родительского элемента.. из этой же таблицы...
можно ли одним запросом к базе выбрать всех потомков с неограниченной вложенностью? или прийдётся уже средставми языка программирования выбирать для каждого из потомков его потомков и т. д.?
11
27 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Mr.Hacker
есть у меня простейшая база со структурой id, val, parent.. соответственно в поле parent содержится id родительского элемента.. из этой же таблицы...
можно ли одним запросом к базе выбрать всех потомков с неограниченной вложенностью? или прийдётся уже средставми языка программирования выбирать для каждого из потомков его потомков и т. д.?



СУБД какая?

под MS SQL Server 2000

Код:
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


правда она ищет с низу вверх... т.е. находит всю цепочку родителей от подчиненного

вот статейка
271
27 февраля 2008 года
MrXaK
721 / / 31.12.2002
а, да, забыл сказать.. субд MySQL.. но за код спасибо... в mysql вроде можно такое же сделать
11
27 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Mr.Hacker
а, да, забыл сказать.. субд MySQL.. но за код спасибо... в mysql вроде можно такое же сделать



вот тут еще, если MySQL это поддерживает, то получается проще и красивей

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог