2012-01-01 4 views
1

Я столкнулся с этой статьей http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/, но я не получил часть «Добавление новых узлов».Управление иерархическими данными в MySQL

Он говорит, что я могу сделать это, чтобы добавить новый узел:

SELECT @myRight := rgt FROM nested_category 
WHERE name = 'TELEVISIONS'; 

UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight; 
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight; 

INSERT INTO nested_category(name, lft, rgt) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2); 
  1. На время выполнения я буду знать родитель а не родственные.
  2. Что делать, если узел не имеет братьев и сестер вообще, как его добавить?
  3. Как добавить новый корневой узел?
+0

Вместо этой структуры вы должны использовать * закрывающий стол * подход. –

+0

@ tereško спасибо, но почему? – oaziz

+0

Потому что, что бы вы ни делали, будут ошибки в будущем. Этот метод хорош для относительно небольшого количества записей, но для больших наборов или более транзакций за один раз вы должны использовать таблицу закрытия. – Mroz

ответ

0

Не имеет значения, братья и сестры. u может добавить новый узел, просто имея его parent_id. он работает следующим образом: добавьте узел как самый левый дочерний элемент родителя, затем обновите lft и rgt узлов, чтобы их позиции были правы для нового узла (все узлы дерева). теперь все узлы дерева обновляются корректно.

для добавления нового корневого узла, u должен установить его parent_id равным NULL.

Надеюсь, это будет полезно для u.

Смежные вопросы