Общие > Базы данных

Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ

<< < (4/12) > >>

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

--- Цитировать ---тогда при удалении нужно добавить для подчиненных узлов:
--- Конец цитаты ---


Обычно удаляется вся ветка, поэтому, обновление для подчиненных узлов - не нужно...


--- Цитировать ---при добавлении для подчиненных узлов:
--- Конец цитаты ---


Это как? ты добавляешь узел сразу с подчиненными узлами?


--- Цитировать ---Если это верно, то операцию перемещения можно будет свести к операции удаления и последующего добавления в новое место с предварительной выборкой данных узла.
--- Конец цитаты ---


Не верно... все делается гораздо проще...

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии