powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, с запросом
5 сообщений из 5, страница 1 из 1
Помогите, пожалуйста, с запросом
    #32073343
W!LD gue$$
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Я начинающий sql-щик. Прошу не пинать, а помочь по мере возможности.

Таблица обычная древесная. Есть поля ID и ParentID.
Можно ли, имея идентификатор записи, одним запросом выбрать ее, плюс всех детей, детей детей и т.д., если уровни вложенности неограничены?

Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
Помогите, пожалуйста, с запросом
    #32073428
denipod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему правильно это на уровне клиента в цикле делать надо.

У меня была подобная ситуация, я ее так разрешил:
у меня не было полей ID и IDparent, а было только одно - ID текстовое, а идентификаторы типа:
001,002,003,001001,001002,001003,003001,003002,002001,
001001001,001001002 ... и так далее.
Понятно, что 001 это родитель 001001,001002,001003

а запрос выглядел следующим образом:
select * from <table> where id like '001%' order by id

- достаешь всю ветку дерева
...
Рейтинг: 0 / 0
Помогите, пожалуйста, с запросом
    #32073483
W!LD gue$$
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не придумал я как сделать это одним запросом, а просто написал рекурсивную процедурку:

begin
select id, parent, child, state, name,
description, id_acc, type1, deleted
from rf_account
where ID = :AID
into :id, :parent, :child, :state, :name, :description,
:id_acc, :type1, :deleted;
suspend;

for select ID
from rf_account
where PARENT=:AID and STATE<5
into :CHILD_ID

do begin
for select id, parent, child, state, name, description,
id_acc, type1, deleted
from SP_GET_ACCNT(:CHILD_ID)
into :id, :parent, :child, :state, :name, :description,
:id_acc, :type1, :deleted
do suspend;
end
end
...
Рейтинг: 0 / 0
Помогите, пожалуйста, с запросом
    #32073531
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль тебя расстроить, но глубина рекурсии ограничена 1000 уровнями (под мосдаем вобще 750). Хотя, может, ты так глубоко и не ныряешь :-).
Я господам-разработчикам доказывал нужность этого дела - обещали вынести в файл конфигурации. Так что, ждёмс ...
...
Рейтинг: 0 / 0
Помогите, пожалуйста, с запросом
    #32073569
W!LD gue$$
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, Gold, ты прав, в реальной базе не более чем на 10-12 уровней у меня ныряет. А то, что ограничено 750 - все же неприятно, но теперь буду знать на всякий случай. Спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]