【问题标题】:Managing hierarchical data in MySQL在 MySQL 中管理分层数据
【发布时间】:2012-01-31 11:15:00
【问题描述】:

我看到了这篇文章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. 如何添加新的根节点?

【问题讨论】:

  • 你应该使用 closure table 方法,而不是那种结构。
  • @tereško 谢谢,但为什么呢?
  • 因为无论你做什么,最终都会有错误。这种方法适用于相对较少的记录,但对于更大的集合或一次更多的事务,您应该使用闭包表。

标签: mysql sql nested-sets hierarchical


【解决方案1】:

兄弟姐妹没有关系。您只需拥有其 parent_id 即可添加新节点。 它的工作原理是这样的:将节点添加为父节点的最左子节点,然后更新节点的 lft 和 rgt,使其位置位于新节点(树的所有节点)的右侧。现在正在更新树的所有节点。

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

希望对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多