Avenus
Under Glory Yield
Перемещение узлов в Nested Sets
Привет, всем!
Перерыл весь форум на эту тему, искал в Интернете.
Самой понятной была статья:
http://www.getinfo.ru/article610.html
Все разобрал: принципы, построение, добавление, удаление...
Но, даже в ней я так и смог понять, как перемещать узлы.
Слишком размыто в этой части у них.
Эти моменты ясны:
1. Ключи и уровень перемещаемого узла.
2. Уровень нового родительского узла.
А этот, нет:
3. Правый ключ узла за который мы вставляем узел (ветку).
Т.е. необходимо получить ключ $right_key_near, но из этого описания не разберешь ничего:
Данная переменная (я, так понимаю, $right_key_near) берется в зависимости от действия:
- При простом перемещении в другой узел;
Что за простое перемещение? С ветками или нет?
- При изменении порядка, когда родительский узел не меняется – правый ключ узла за которым будет стоять перемещаемый;
И какой нужно выбрать ключ: left_key или right_key?
- При переносе узла в корень дерева – максимальный правый ключ ветки;
Этот запрос, в принципе, не нужен, если в дереве корень всегда постоянен?
- При поднятии узла на уровень выше – правый ключ старого родительского узла
Этот запрос вообще вернет много строк, какая нужная?
К тому же, при поднятии узла на уровень выше, а как же быть с тем, если нужно на уровень ниже?
И чем отличается это от перемещения в другой узел?
Спасибо всем, кто поможет понять
Привет, всем!

Перерыл весь форум на эту тему, искал в Интернете.
Самой понятной была статья:
http://www.getinfo.ru/article610.html
Все разобрал: принципы, построение, добавление, удаление...
Но, даже в ней я так и смог понять, как перемещать узлы.
Слишком размыто в этой части у них.
Эти моменты ясны:
1. Ключи и уровень перемещаемого узла.
2. Уровень нового родительского узла.
А этот, нет:
3. Правый ключ узла за который мы вставляем узел (ветку).
Т.е. необходимо получить ключ $right_key_near, но из этого описания не разберешь ничего:
Данная переменная (я, так понимаю, $right_key_near) берется в зависимости от действия:
- При простом перемещении в другой узел;
PHP:
SELECT (right_key – 1) AS right_key FROM my_tree WHERE id = [id нового родительского узла]
- При изменении порядка, когда родительский узел не меняется – правый ключ узла за которым будет стоять перемещаемый;
PHP:
SELECT left_key, right_key FROM my_tree WHERE id = [id соседнего узла с который будет(!) выше (левее)]****
**** Следует обратить внимание, что при поднятии узла вверх по порядку, узел выбирается не соседний,
а следующий, за неимением оного (перемещаемый узел будет первым) берется левый ключ родительского
узла
- При переносе узла в корень дерева – максимальный правый ключ ветки;
PHP:
SELECT MAX(right_key) FROM my_tree
- При поднятии узла на уровень выше – правый ключ старого родительского узла
PHP:
SELECT right_key FROM my_tree WHERE level = $level
К тому же, при поднятии узла на уровень выше, а как же быть с тем, если нужно на уровень ниже?
И чем отличается это от перемещения в другой узел?
Спасибо всем, кто поможет понять
