|
Фильтрация при иерархии?
|
|||
---|---|---|---|
#18+
Подскажите где можно найти подборку вариантов хранимых процедур для выборки всех записей удовлетворяющих какому-либо условию и всех их парентов вплоть до корня. Условия иерархии: ID, PARENTID? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2003, 11:05 |
|
Фильтрация при иерархии?
|
|||
---|---|---|---|
#18+
на ibase.ru есть подборка статей про древовидные структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2003, 11:12 |
|
Фильтрация при иерархии?
|
|||
---|---|---|---|
#18+
Странно сформулирован вопрос... я бы сказал непонятно... все записи удовлетворяющие определенному условию выбираются ключевым словом where... если нужен разбор дерева, то в зависимости от направления, либо рекурсивный спуск (идем от корня к листьям), либо линейный подъем (от листьев к корню), либо комбинация этих вариантов (подъем по дереву до определенной вершины и рекурсивный спуск) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2003, 03:11 |
|
Фильтрация при иерархии?
|
|||
---|---|---|---|
#18+
Если я правильно понял вопрос, то отвечаю - Есть таблица 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 Поймёшь как она работает - и получишь сам всё, что тебе надо - успехов ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2003, 21:33 |
|
Фильтрация при иерархии?
|
|||
---|---|---|---|
#18+
А и вот выборка товаров, соответствующих дереву: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2003, 21:39 |
|
|
start [/forum/topic.php?fid=40&fpage=524&tid=1580743]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 152ms |
0 / 0 |