问题标签 [nested-sets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1603 浏览

mysql - 嵌套集层次结构中的多个表

我有许多不同的项目存储在不同的 MySQL 表中,我想将它们放入树层次结构中。使用邻接表模型,我可以为每个表添加一个 parent_id 字段,并使用外键关系链接这些表。

但是,我想使用嵌套集/修改的预序树遍历模型。数据将在严重偏向于读取的环境中使用,并且我希望运行的查询类型支持这种方法。

问题是我在嵌套集上的所有信息都假设您只有一种类型的项目,存储在一个表中。我能想到的解决方法是:

  • 树中有多个外键字段,每个表/项目类型一个。
  • 在树结构中存储项目表的名称以及项目 ID。

至少可以说这两种方法都不优雅,那么有没有更好的方法呢?

0 投票
3 回答
4902 浏览

sql - SQL Server 树层次结构和具有重复记录 id 的嵌套集

鉴于我有这个结果集结构(多余的字段已被剥离)

是否可以按树顺序返回记录,即ParentChildren如果 aChild是 a Parent,那么它们的Children,如果不是 thenSibling等等?例如,

我能想到的唯一方法就是遵循这篇文章 -

使用嵌套集提高层次结构性能

并针对每条记录包含[LeftExtent][RightExtent]字段。现在文章中的 SQL 在Ids唯一时可以正常工作,但是在这种特定的树结构中,相同的记录Id可能会出现在树中的不同位置(ParentId显然字段不同)。我认为问题出在文章中的这个 SQL 中 -

如何更改它以允许为具有重复的记录Ids提供 [LeftExtent] 和 [RightExtent] 值,或者我完全错过了一种更简单的方法来按我需要的顺序返回结果集?

0 投票
1 回答
3684 浏览

python - 嵌套集模型和 SQLAlchemy——添加新节点

应该如何使用 SQLAlchemy 将新节点添加到使用嵌套集模型实现的树中?

我需要表上的触发器来分配新节点lftrgt更新所有其他受影响的节点,但是定义节点位置的最佳方法是什么?我可以将parent_id新节点的 传递给构造函数,但是我如何将 传递parent_id给触发器?

0 投票
3 回答
705 浏览

mysql - 搜索嵌套集

我有一个 MySQL 表,它的作用类似于嵌套集,以包含类别层次结构。表架构如下所示:

lftrgt定义节点的左右边界(嵌套集的工作方式是每个节点的 id 都落在其父节点的边界内),并parent_id指定父节点。唯一索引允许有多个具有相同名称的类别,只要它们没有相同的父类别。

我试图找出一种基于层次结构在集合中找到特定节点的正确方法。例如,如果我查找 foo/bar/baz,我想检索名为 baz 的节点,其父节点名为 bar,其父节点名为 foo。显然,我不能只按名称搜索,因为可能有多个具有相同名称的类别。

我能想到的方法是找到最顶层的类别,然后找到具有给定名称的每个后续类别,其父 id 是先前找到的类别的名称,但这对我来说似乎不是很有效。有没有更好的方法来搜索嵌套集?

0 投票
7 回答
15838 浏览

php - 将修改后的前序树遍历模型(嵌套集)放入

    我正在尝试将使用树遍历模型分层设置的数据放入 <ul> 中,以便在我的网站上显示。

    这是我的代码:

    这是我的示例表:

    现在它输出如下内容:

    谁能告诉我为什么或如何以分层结构输出列表?

    相关主题

    0 投票
    7 回答
    8794 浏览

    sql - 如何将嵌套集中的所有记录呈现到真正的 html 树中

    awesome_nested_set在我的 Rails 项目中使用该插件。我有两个看起来像这样的模型(简化):

    数据库中的树按预期构建。和的所有值都是正确的parent_id。树有多个根节点(这当然是允许的)。lftrgtawesome_nested_set

    现在,我想以正确排序的树状结构呈现给定客户的所有类别:例如嵌套<ul>标签。这不会太难,但我需要它高效(sql 查询越少越好)。

    更新:发现可以计算树中任何给定节点的子节点数,而无需进一步的 SQL 查询:number_of_children = (node.rgt - node.lft - 1)/2. 这并不能解决问题,但可能会有所帮助。

    0 投票
    1 回答
    960 浏览

    ruby-on-rails - awesome_nested_set

    我有一个选择输入:

    f.select :category_id, nested_set_options(Category, @categories) {|i| "#{'-' * i.level} #{i.name}" }

    仅显示 level > 1 的类别的最有效方法是什么?

    0 投票
    0 回答
    1340 浏览

    mysql - 触发器:嵌套集的邻接列表

    我在遗留系统上有一个邻接列表,我想递归查询(需要获取小计等)。

    我可以在 MySQL 中创建一个触发器,将其存储在单独的表中,或者将给定集合的“嵌套集等效”存储在同一个表的单独列中吗?

    我的套餐是这样的:

    我要这个:

    0 投票
    4 回答
    3740 浏览

    database - 允许一个类别有多个父母有意义吗?有替代品吗?

    简短的问题:应该如何管理出现在多个类别下的产品类别?这样做是一个坏习惯吗?

    背景信息: 我们有一个产品数据库,其类别如下:

    请注意,胶水和回形针被分配给这两个类别。虽然它们出现在这个类别树中的两个不同位置,但它们在数据库中具有相同的类别 ID。为什么?两个原因:

    1. 类别被分配了属性——例如,回形针可以有重量、材料、颜色等。
    2. 分配到胶水类别的产品显示在工艺品和办公用品下。这是意料之中的——它们与数据库中的实际类别 ID 相同。

    这使我们能够管理单个类别及其属性和分配的产品,但将其放置在类别树中的多个位置。

    我们使用的是嵌套集模型,所以我们用来支持它的 db 结构是:

    因此,Category 和 CategoryTree 之间存在 1:M,因为在类别树中可以有给定类别的多个实例。

    是否有一种更简单的方法来对此进行建模,以允许产品类别显示在多个类别下?

    0 投票
    1 回答
    861 浏览

    mysql - 对 MPTT 结果集中的项目进行排序?

    我正在使用MPTT(修改的预序树遍历)模型将分层数据存储在我的 MySQL 表中。(MPTT 模型:另一种描述是嵌套集模型。)。我的问题是:有没有人想出一种聪明的方法来对树上的查询结果进行排序?我可以只使用“按标签排序”,但结果集将按标签排序,而不考虑节点在树中的位置或深度。

    这是我用来检索任意节点的树的查询示例,每个节点的深度:

    根据http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

    当然,这总是按项目在嵌套集中的位置排序。如果我想通过“lastName”或“accountBalance”或“town”来订购它们怎么办?这可以在 MySQL 中完成,还是你们认为我必须求助于我的脚本语言对结果进行排序?