alexeyco
Новичок
Обновление всех веток одним запросом в nested sets
Добрый день!
Не ради того, чтобы сделать базу избыточной, а для экономии нагрузки я внес в стандартную модель базы данных nested sets поле parent, где хранится id родительского узла. Точно так же - для экономии ресурсов мне необходимо внести в модель поле count, где хранились бы данные о количестве вложенных узлов (имеется в виду - тех узлов, которые находятся на один уровень ниже и имеют своим родителем текущий узел). Понимаете, да? В первом случае при переносе узлов, добавлении их и прочем проблем не возникает, да и не может.
Проблема во втором случае. Я пытаюсь нащупать - как обновить поле count по всему дереву одним запросом. Почему я не прибегаю к внутренним процедурам - потому, что решение должно быть потенциально, ансишное и переносимое на большинство других основных СУБД, ибо я не уверен в том, что выбор постгри у нас последний.
Я пытаюсь вот, что сделать:
Конечно, при добавлении можно пересчитать только значение поля count родителя, при переносе - только двух id - старого и нового родителей. При удалении, соответственно... Я, вероятно, уже так и сделаю... Но в чем, объясните, пожалуйста, моя ошибка?
Добрый день!
Не ради того, чтобы сделать базу избыточной, а для экономии нагрузки я внес в стандартную модель базы данных nested sets поле parent, где хранится id родительского узла. Точно так же - для экономии ресурсов мне необходимо внести в модель поле count, где хранились бы данные о количестве вложенных узлов (имеется в виду - тех узлов, которые находятся на один уровень ниже и имеют своим родителем текущий узел). Понимаете, да? В первом случае при переносе узлов, добавлении их и прочем проблем не возникает, да и не может.
Проблема во втором случае. Я пытаюсь нащупать - как обновить поле count по всему дереву одним запросом. Почему я не прибегаю к внутренним процедурам - потому, что решение должно быть потенциально, ансишное и переносимое на большинство других основных СУБД, ибо я не уверен в том, что выбор постгри у нас последний.
Я пытаюсь вот, что сделать:
Код:
UPDATE
categories
SET
category_count = (
SELECT
COUNT(с.category_id)
FROM
categories as c
WHERE
c.category_parent = category_id
)