powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дерево, с ограничениями...
8 сообщений из 8, страница 1 из 1
Дерево, с ограничениями...
    #32140484
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть дерево, которое храниться с помощью 2-х таблиц - Good(id, name, groupID) & Groups(id, name)
и есть еще одна таблица CustomerGoods(id, cust_id, good_id)...
как выбрать только те группы, у которых есть товары( при этом наличие товаров смотриться CustomerGoods), сохраняя иерархию?
тут трабл в том, что группа может и не иметь товара, но вложенная в нее группа имеет...

те мб так
Код: plaintext
1.
2.
3.
g1 
|_g2 
   |_ware1 
   |_ware2 


соотв нужно выбрать обе группы...
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140522
Седов А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Дерево должно храниться в одной таблице.

2.connect by IB не поддерживает ->
а) написать хранимую процедуру или
б) создать служебное поле "количество потомков", которое заполнять
триггером при добавлении нового товара(тогда группы можно будет
достать селектом).
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140534
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моку предложить вариант (у меня подобная задача стояла в системе безопасности), сперва производим разбор дерева классический, а потом полученный набор данных фильтруем по нужным условиям
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140536
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
давай!
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140542
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня примерно такая идея -
сначала выбираем все группы, имеющие товары...
Код: plaintext
1.
SELECT g. "GROUPID"  FROM CustomerGoods cg, Good g
 WHERE ((cg. "customer_id" = 2007 ) AND (g. "ID" =cg. "good_id" ))

потом выбираем группы, являющиеся предками, для предыдущих... и т.д.
Код: plaintext
1.
2.
select gg.parentgroupid from goodgroup gg WHERE  id IN
 (SELECT g. "GROUPID"  FROM CustomerGoods cg, Good g
 WHERE ((cg. "customer_id" = 2007 ) AND (g. "ID" =cg. "good_id" )))

вот только как это сдалать?
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140545
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я вообще-то уже предложил....\r
разбор тут\r
ну а в темповой таблице я думаю удаление ненужных строк сможешь и сам написать :)
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140553
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по поводу твоей мысли, это можно ТОЛЬКО при условии что нужно проработать всю таблицу. На практике возникает чаще, что известен некоторый корень и от него нужно плясать. Тогда твой алгоритм будет медленным, так как придется переваривать всю таблицу и не раз.
...
Рейтинг: 0 / 0
Дерево, с ограничениями...
    #32140611
pvnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все, всеп спасибо.
сделал...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дерево, с ограничениями...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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