Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дерево, с ограничениями... / 8 сообщений из 8, страница 1 из 1
15.04.2003, 08:52
    #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
15.04.2003, 09:44
    #32140522
Седов А.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
1. Дерево должно храниться в одной таблице.

2.connect by IB не поддерживает ->
а) написать хранимую процедуру или
б) создать служебное поле "количество потомков", которое заполнять
триггером при добавлении нового товара(тогда группы можно будет
достать селектом).
...
Рейтинг: 0 / 0
15.04.2003, 09:52
    #32140534
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
Моку предложить вариант (у меня подобная задача стояла в системе безопасности), сперва производим разбор дерева классический, а потом полученный набор данных фильтруем по нужным условиям
...
Рейтинг: 0 / 0
15.04.2003, 09:54
    #32140536
pvnic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
давай!
...
Рейтинг: 0 / 0
15.04.2003, 09:56
    #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
15.04.2003, 09:57
    #32140545
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
так я вообще-то уже предложил....\r
разбор тут\r
ну а в темповой таблице я думаю удаление ненужных строк сможешь и сам написать :)
...
Рейтинг: 0 / 0
15.04.2003, 10:02
    #32140553
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
А по поводу твоей мысли, это можно ТОЛЬКО при условии что нужно проработать всю таблицу. На практике возникает чаще, что известен некоторый корень и от него нужно плясать. Тогда твой алгоритм будет медленным, так как придется переваривать всю таблицу и не раз.
...
Рейтинг: 0 / 0
15.04.2003, 10:30
    #32140611
pvnic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дерево, с ограничениями...
все, всеп спасибо.
сделал...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дерево, с ограничениями... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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