Rin
*
Tree of nested sets - определение кол-ва затронутых записей до выполнения запроса
Вопрос по деревьям модели вложенных множеств.
Как известно, перед вставкой записи в дерево (запросом INSERT) необходимо сделать смещение левого или правого поддерева.
Для вставки записи в конец списка дочерних узлов запросы будут следующими:
?#:table -- название таблицы дерева
?i:ns_left, ?i:ns_right -- числовые значения родительского узла
?i:delta -- значение равно 2.
Возможно ли определить кол-во затронутых записей (~ формулы для 2-х случаев: слева и справа), которые будут обновлены ДО выполнения запроса UPDATE в БД? Было бы неплохо добавить LIMIT в sql запросы а так же принимать решение для выбора правого или левого обновления.
Вопрос по деревьям модели вложенных множеств.
Как известно, перед вставкой записи в дерево (запросом INSERT) необходимо сделать смещение левого или правого поддерева.
Для вставки записи в конец списка дочерних узлов запросы будут следующими:
Код:
-- справа:
UPDATE ?#:table
SET ns_left = IF (ns_left > ?i:ns_left, ns_left + ?i:delta, ns_left),
ns_right = ns_right + ?i:delta
WHERE ns_right >= ?i:ns_right;
-- слева:
UPDATE ?#:table
SET ns_right = IF (ns_right < ?i:ns_right, ns_right - ?i:delta, ns_right),
ns_left = ns_left - ?i:delta
WHERE ns_left < ?i:ns_right;
?i:ns_left, ?i:ns_right -- числовые значения родительского узла
?i:delta -- значение равно 2.
Возможно ли определить кол-во затронутых записей (~ формулы для 2-х случаев: слева и справа), которые будут обновлены ДО выполнения запроса UPDATE в БД? Было бы неплохо добавить LIMIT в sql запросы а так же принимать решение для выбора правого или левого обновления.