【问题标题】:How to insert data in the nested set model(MySQL);如何在嵌套集合模型中插入数据(MySQL);
【发布时间】:2012-07-07 07:12:57
【问题描述】:

在嵌套集合模型中,我们有 LEFT 和 Right 列

第一次空表时,我需要在右列插入什么,如果我不知道我会有多少个孩子

左 1 - 永远

对吗? - 这里有什么价值??

如何使其动态化?不是静态的。

ps:使用php

【问题讨论】:

    标签: php mysql database nested-sets


    【解决方案1】:

    根据您的标签和标题,我假设您正在寻找一种适用于 MySQL 的解决方案。

    是的,你是对的,除非你事先知道元素的数量,否则right 的值需要动态计算。您可以使用两种方法:

    • 您可以从有效的最小值(在本例中为 2)开始,然后根据需要增加它。
    • 您可以只进行 10000000 之类的猜测,并希望这已经足够了,但您需要做好准备,以防它可能还不够,以后可能需要再次调整。

    在这两种情况下,您都需要实现在插入新行时可能需要调整多行的 leftright 值,但在第二种情况下,您实际上只需要执行更新,如果您的猜测是错误的。所以第二种解决方案更复杂,但可以提供更好的性能。

    请注意,在存储分层数据的四种常用方法中,嵌套集方法是最难执行插入和更新的方法。请参阅 Bill Karwin Models for Heirarchical Data 的幻灯片 69。

    【讨论】:

    • xmmmm,但是如果我使用邻接列表,我将不得不进行许多查询,例如 LEFT JOIN 等...对于深度来说是静态的,所以仍然是 2 个设计路径枚举和闭包表,即更好的选择?
    • 而且每个节点都会有很多孩子,他们会有其他孩子,看起来嵌套模型不适合这个......所以当你不知道时使用什么设计更好你会有多少级?或记录
    • 该概述非常以 MySQL 为中心,因为对于所有支持递归查询的 DBMS(这几乎是当今的主流功能),查询子树归类为“简单”。
    • @a_horse_with_no_name:我更新了我的答案,更清楚地表明这只是 MySQL 的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多