powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Фильтрация при иерархии?
5 сообщений из 5, страница 1 из 1
Фильтрация при иерархии?
    #32123499
Nikola18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите где можно найти подборку вариантов хранимых процедур для выборки всех записей удовлетворяющих какому-либо условию и всех их парентов вплоть до корня.
Условия иерархии: ID, PARENTID?
...
Рейтинг: 0 / 0
Фильтрация при иерархии?
    #32123516
на ibase.ru есть подборка статей про древовидные структуры.
...
Рейтинг: 0 / 0
Фильтрация при иерархии?
    #32124244
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно сформулирован вопрос... я бы сказал непонятно... все записи удовлетворяющие определенному условию выбираются ключевым словом where... если нужен разбор дерева, то в зависимости от направления, либо рекурсивный спуск (идем от корня к листьям), либо линейный подъем (от листьев к корню), либо комбинация этих вариантов (подъем по дереву до определенной вершины и рекурсивный спуск)
...
Рейтинг: 0 / 0
Фильтрация при иерархии?
    #32125015
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял вопрос, то отвечаю -
Есть таблица T_SKLAD в ней поля:

N_SKLAD, N_PARENTS, SKLAD (думаю смысл их понятен)

а вот процедура

CREATE PROCEDURE GET_TREE (
IN_SKLAD INTEGER
) RETURNS (
OUT_N_SKLAD INTEGER,
OUT_N_PARENTS INTEGER,
OUT_SKLAD VARCHAR(50)
) AS
DECLARE VARIABLE TMP1 INTEGER;
BEGIN
SELECT S.N_SKLAD,S.N_PARENTS,S.SKLAD
FROM T_SKLAD S
WHERE S.N_SKLAD=:IN_SKLAD
INTO :OUT_N_SKLAD, :OUT_N_PARENTS, :OUT_SKLAD;
SUSPEND;
FOR SELECT S.N_SKLAD FROM T_SKLAD S
WHERE S.N_PARENTS=:IN_SKLAD
ORDER BY SKLAD
INTO :TMP1
DO
FOR SELECT OUT_N_SKLAD,OUT_N_PARENTS,OUT_SKLAD FROM GET_TREE(:TMP1) INTO :OUT_N_SKLAD, :OUT_N_PARENTS, :OUT_SKLAD
DO
SUSPEND;
END

Поймёшь как она работает - и получишь сам всё, что тебе надо - успехов
...
Рейтинг: 0 / 0
Фильтрация при иерархии?
    #32125016
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А и вот выборка товаров, соответствующих дереву:

CREATE PROCEDURE GET_TOVAR_TREE (
IN_SKLAD INTEGER
) RETURNS (
N_TOVAR INTEGER,
KOD VARCHAR(10),
TOVAR VARCHAR(100),
OSTATOK DOUBLE PRECISION
) AS
DECLARE VARIABLE TMP1 INTEGER;
BEGIN
TMP1=:IN_SKLAD;
for select T.N_TOVAR,T.KOD,T.TOVAR,T.OSTATOK
FROM
(GET_TREE(:TMP1)
inner join T_TOVAR T on T.N_SKLAD=OUT_N_SKLAD)
order by T.KOD
INTO :N_TOVAR,:KOD,:TOVAR,:OSTATOK

do

SUSPEND;
END

естественно в таблице товаров есть поля N_TOVAR и N_SKLAD - смысл их понятен, а KOD TOVAR и OSTATOK несут смысловую нагрузку в соответствии с русской аббревиатурой.

Bye
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Фильтрация при иерархии?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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