2012-01-01 121 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

而不是那个结构,你应该使用*闭包表*的方法。 – 2012-01-01 19:59:13

+0

@tereško谢谢,但为什么? – oaziz 2012-01-01 20:45:27

+0

因为无论你做什么,最终都会出现错误。这种方法适用于相对较少的记录,但对于更大的集合或更多的事务,您应该使用闭包表。 – Mroz 2013-10-22 10:53:06

回答

0

兄弟姐妹并不重要。你可以通过添加parent_id来添加新节点。 它的工作方式如下:将节点添加为父节点的最左侧子节点,然后更新其位置在新节点(树的所有节点)右侧的节点的lft和rgt。现在树的所有节点都正在更新。

为了添加一个新的根节点,你应该把它的parent_id设置为NULL。

我希望这对你有用。