Общие > Базы данных
Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ
Phoinix:
Гость
Что-то не вижу никакой проблемы в решении данного вопроса...
Есть запрос для получения родителя узла:
SELECT id
FROM my_table
WHERE t2.left_key < t1.left_key AND t2.right_key > t1.right_key AND t2.level = t1.level - 1
Есть запрос выборки всех узлов:
SELECT id
FROM my_table
ORDER BY left_key
Объединяем 2 запроса:
SELECT t1.id AS id, t2.id AS parent
FROM my_table AS t1
LEFT JOIN my_table AS t2
ON t2.left_key < t1.left_key AND t2.right_key > t1.right_key AND t2.level = t1.level - 1
ORDER BY t1.left_key
Соответственно если родителя нет - parent = NULL
Гость:
Phoinix
Спасибо!
APL:
2 Phoinix
--- Цитировать ---Поэтому я сделал свое решение, которое позволяет 1 запросом перемещать узел в любую точку дерева...
--- Конец цитаты ---
Нельзя ли поподробнее? Если можно с примером...
Спасибо.
Piter-G:
а если мы удаляем и добавляем узел не в конец ветки, а где-нибудь посередине.
тогда при удалении нужно добавить для подчиненных узлов:
UPDATE my_tree SET right_key = right_key – 1, left_key = left_key – 1WHERE right_key < $right_key AND left_key > $left_key
при добавлении для подчиненных узлов:
UPDATE my_tree SET right_key = right_key + 1, left_key = left_key + 1WHERE right_key < $right_key AND left_key > $left_key
Если это верно, то операцию перемещения можно будет свести к операции удаления и последующего добавления в новое место с предварительной выборкой данных узла.
Phoinix:
Piter-G
--- Цитировать ---тогда при удалении нужно добавить для подчиненных узлов:
--- Конец цитаты ---
Обычно удаляется вся ветка, поэтому, обновление для подчиненных узлов - не нужно...
--- Цитировать ---при добавлении для подчиненных узлов:
--- Конец цитаты ---
Это как? ты добавляешь узел сразу с подчиненными узлами?
--- Цитировать ---Если это верно, то операцию перемещения можно будет свести к операции удаления и последующего добавления в новое место с предварительной выборкой данных узла.
--- Конец цитаты ---
Не верно... все делается гораздо проще...
Навигация
Перейти к полной версии