Xpoint
   [напомнить пароль]

Кольчество вложенностей в рекурсивной таблице

Метки: [без меток]
2008-08-01 10:18:14 [обр] Павел Карасёв(0/14)[досье]

Вот есть таблица
table

idparentname
10level_1
20level_2
31level_1.1
43level1_1.1.1
52level_2.1
61level_1.2

Можно ли с помощью одного запроса вычислить уровень вложенности в таблице?
Имеется ввиду связь table.id=table.parent

т.е. в данном случае будет три уровня вложенности

спустя 59 минут [обр] Давид Мзареулян(3/1003)[досье]
Написать хранимую процедуру, которая будет считать число точек в name и прибавлять 1?
спустя 16 минут [обр] Павел Карасёв(0/14)[досье]
Нет, нет. поле name я добавил для наглядности.
Как определить кольчество уровней вложенности только по id и parent?
спустя 54 минуты [обр] Давид Мзареулян(3/1003)[досье]
Ну, одним SQL-выражением — никак не получится.
спустя 6 минут [обр] Thirteensmay(0/157)[досье]

Зависит от СУБД. Например в Oracle это делается элементарно:

select max(level)
from mytable
start with id = 1
connect by prior id = parent

Для PostgreSQL есть костылик.

В стандарте SQL и остальных СУБД насколько я знаю такого нет. Но для любой СУБД поддерживающей хранимые процедуры вы можете написать такую которая будет это делать циклом. Ну а из вне просто вызывать эту процедуру типа select get_level;

спустя 33 минуты [обр] Павел Карасёв(0/14)[досье]

Thirteensmay[досье]
Спасибо!

У меня обычная mysql, поэтому посмотрю хранимые процедуры, в 5-й версии написано, что они есть.

спустя 7 часов [обр] Дмитрий Кучкин(3/236)[досье]
Thirteensmay[досье]
А можно ссылку на костылик для PostgreSQL?
спустя 1 день 16 часов [обр] Thirteensmay(0/157)[досье]
Поиск по ключу Иерархические запросы PostgreSQL
В стандартной поставке есть специальная функция которую можно использовать в запросах, а еще вроде есть пач который обеспечивает синтаксис как в Oracle.
спустя 2 дня 2 часа [обр] Дмитрий Кучкин(3/236)[досье]
Thirteensmay[досье] Спасибо!
Powered by POEM™ Engine Copyright © 2002-2005