Управление иерархическими данными в MySQL

Я наткнулся на эту статью http://mikehillyer.com/articles/managing-hierarchical-data-in-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. Как я могу добавить новый корневой узел?

person oaziz    schedule 01.01.2012    source источник
comment
Вместо этой структуры вы должны использовать подход закрывающей таблицы.   -  person tereško    schedule 01.01.2012
comment
@ tereško спасибо а почему?   -  person oaziz    schedule 02.01.2012
comment
Потому что что бы вы ни делали, в конечном итоге будут ошибки. Этот метод хорош для относительно небольшого количества записей, но для больших наборов или большего количества транзакций одновременно вы должны использовать таблицу закрытия.   -  person Mroz    schedule 22.10.2013


Ответы (1)


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

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

Я надеюсь, что это будет полезно для вас.

person Mohsen Yazdinejad    schedule 08.05.2013