Xpoint
   [напомнить пароль]

Nested Sets: перемещение ветки

Метки: [без меток]
2012-08-17 10:41:36 [обр] Евгений Седов aka KPbIC(0/176)[досье]
сообщение промодерировано

В сети в разном оформлении гуляет одна и та же статья про Nested Sets. Особо меня интересует вопрос про перемещение веток. Я там половины не могу понять.

Например, при перемещении ветки вниз, предлагается такой запрос:

UPDATE my_tree SET left_key = left_key - $skew_tree WHERE left_key < $left_key AND left_key > $right_key_near

Подскажите, пожалуйста, смысл выражения left_key < $left_key.

спустя 2 дня 2 часа [обр] Филипп Ткачев(0/112)[досье]

Насколько я понимаю, этот запрос перемещает вложенные в узел подузлы - точнее пересчитывает только левый ключ.
Но что-то мне подсказывает, что в нем присутствует ошибка, т.к. условие будет ложным и пересчет не произойдет.

Я когда писал свой компонент управления деревом, то пользовался этой статьей http://webscript.ru/stories/05/01/24/6319028

спустя 23 часа [обр] Евгений Седов aka KPbIC(0/176)[досье]
сообщение промодерировано

Поменял ссылку в первом посте, там больше картинок.

Не, вложенные узлы (вместе с родителем) перемещаются по id. А это запрос на изменение левых ключей в области между старым и новым расположением ноды. Понятно, что при перемещении ветки вниз надо уменьшить в этой области значения ключей на количество ключей, занимаемых переносимой веткой. На картинке там это хорошо показано. И даже дальше в описании тоже все верно:

Для левого ключа:
        левый ключ узла больше $right_key
        левый ключ узла меньше $right_key_near

Но вот сам запрос удивляет непонятным происхождением. По идее, должно быть:

UPDATE category SET left_key = left_key - $skew_tree WHERE left_key > $righ_key AND left_key <= $right_key_near
спустя 9 часов [обр] Thirteensmay(0/157)[досье]
А, Евгений, я извиняюсь за офтоп, но вы таки решили что NS лучше стандартной SQL рекурсии? Или в текущем случае "все запущенно"? Я вот там обновил тему, появились новые знания: Рекурсивное удаление, внешние ключи Наверное из этого было бы неплохо сделать отдельную тему :)
Powered by POEM™ Engine Copyright © 2002-2005