Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / while в plpgsql - нужна помощь / 3 сообщений из 3, страница 1 из 1
12.02.2006, 04:55
    #33539274
ZiNTeR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
while в plpgsql - нужна помощь
В обем суть вопроса:
Я поднимаю каталог товаров.
У меня есть категории
cat_id - id-шник категории
cat_name - ее название
parent_id - id родительской категории
childs_num - число вложенных категорий

Есть товары
id_item
name
price
desc

есть таблица связей items_to_cat
id_cat
id_item
is_real boolean - указывает тип связи(0 виртуальный - то есть товар формально принадлежит категории, но реально относится к одному из потомков данной категории, 1 - относится фактически)

Суть в том, что допустим вначале была такая структура категорий
товары
-принтеры
-комплектующие
Потом произошла ситация
товары
-комплектующие
--принтеры
-другие комплектующие

то есть для категории принтеры изменился parent_id
для комплектующие - childs_num+1
для товары childs_num-1
Надо перебить items_to_cat:
Как я вижу алгоритм:
1. убрать связи товара из принтеров из категории товары(и ее родителей, до тех пор, пока par_id!=0)
2. Для категории комплектующие(и ее родителей, вплоть до тех, где Par_id=0) проставить виртуальную связь.
Я понимаю, что:
1. Триггер должен стартовать от категории on update
2. Что надо спросить old.par_id и занести его в переменную
3. ДО тех пор, пока par_id>0 убирать связь (items_to_cat)
4. То же самое, но устанавливать связь для new.par_id
НО я абсолютно не могу понять как это поднять на plpgsql
В мануале я не нашел примера с while, ка реализовать цикл
Помогите пожалуйста синтаксисом while
И еще: не могли бы вы мне подсказать, нет будет ли у меня в данном цикле бесконечной рекурсии?
...
Рейтинг: 0 / 0
12.02.2006, 04:58
    #33539275
ZiNTeR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
while в plpgsql - нужна помощь
Блин - как посмотрел в свой же сабж - тут же нашел ответ на первый вопрос )))
Помогите с вопросом номер 2 - не будет ли бесконенчой рекурсии?
И еще - с вашей точки зрения, правильно ли реализована система (виртуальная принадлежность делается для того, чтобы в категориях, где нет товарв, выдавать топ из их товаров - наследников)
...
Рейтинг: 0 / 0
14.02.2006, 09:53
    #33542626
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
while в plpgsql - нужна помощь
ZiNTeRИ еще - с вашей точки зрения, правильно ли реализована системаИМХО. Поля childs_num, is_real избыточны, поэтому не нужны. Связь id_item, cat_id должна быть один к одному, поэтому таблицу связей можно объединить с таблицей товаров. Каждый товар должен быть приписан к одной листовой (у которой нет потомков) категории.

ZiNTeRвиртуальная принадлежность делается для того, чтобы в категориях, где нет товарв, выдавать топ из их товаров - наследниковДля работы с деревьями вида "id, parent_id" есть модуль ltree. С его помощью можно будет выдать товары категорий-потомков, подсчитать childs_num и т. д.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / while в plpgsql - нужна помощь / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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