问题标签 [hierarchical-data]

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 投票
9 回答
39459 浏览

mysql - 是否可以在单个查询中查询 MySQL 中的树结构表到任何深度?

我认为答案是否定的,但我希望有人对如何在 SQL(MySQL)中将树结构爬行到任何深度有任何见解,但只需一个查询

更具体地说,给定一个树结构表(id、data、data、parent_id)和表中的一行,是否有可能获取所有后代(子/孙/等),或者就此而言所有祖先(父母/祖父母/etc) 不知道它会下降或上升多远,使用单个查询?

或者正在使用某种递归要求,我一直在深入查询直到没有新结果?

具体来说,我使用的是 Ruby 和 Rails,但我猜这不是很相关。

0 投票
14 回答
129045 浏览

sql - 将平面表解析为树的最有效/优雅的方法是什么?

假设您有一个存储有序树层次结构的平面表:

这是一个图表,我们有[id] Name. 根节点 0 是虚构的。

您将使用什么简约方法将其作为正确排序、正确缩进的树输出到 HTML(或文本)?

进一步假设你只有基本的数据结构(数组和哈希图),没有带有父/子引用的花哨对象,没有 ORM,没有框架,只有你的两只手。该表表示为一个结果集,可以随机访问。

伪代码或纯英文都可以,这纯粹是一个概念问题。

额外的问题:有没有更好的方法在 RDBMS 中存储这样的树结构?


编辑和添加

回答一位评论者(Mark Bessey)的问题:根节点不是必需的,因为它永远不会被显示。ParentId = 0 是表达“这些是顶级”的约定。Order 列定义了如何对具有相同父节点的节点进行排序。

我所说的“结果集”可以被描绘成一个哈希图数组(保留在那个术语中)。因为我的例子本来就应该在那里。有些答案会加倍努力并首先构建它,但这没关系。

树可以任意深。每个节点可以有 N 个孩子。不过,我并没有完全想到“数百万个条目”树。

不要将我选择的节点命名('Node 1.1.1')误认为是可以依赖的东西。这些节点同样可以称为“Frank”或“Bob”,没有暗示命名结构,这只是为了使其可读。

我已经发布了我自己的解决方案,因此你们可以将其分解。

0 投票
4 回答
31943 浏览

sql - 父子关系SQL查询

我有父子关系的数据库表:

这里 parentId = 0 表示它是根级节点。现在我想编写一个 SQL 查询,它将返回父类别所有级别的子级。

例如,对于 nodeId = 1,它应该返回 3、4、5、6。

我正在使用 MS SQL Server 2005

0 投票
2 回答
3066 浏览

sql - 需要 ANSI 92 递归 SQL 语句

我目前正在将 SQL Server SQL 语句翻译成它们的 ANSI 通用等效语句,并且我坚持使用 WITH 语句的递归语句。

为了集中讨论这个问题,我将问题简化如下

如果我有两张桌子

  1. 报告单位

    • col1:键
    • col2: ParentReportingUnitKey
  2. 设施

    • col1:键
    • col2: ParentReportingUnitKey

此结构描述了向下至设施的报告单位的层次结构,其中报告单位可能有 0 .. 1 个直接父报告单位和 0 .. n 个子报告单位。

设施是链接到报告单位的“叶”记录。

我需要制作一个 ANSI 92 有效的 SQL 语句(或者最坏的情况下可以在 Oracle、DB2 和 SQL Server 上工作的语句),它将返回与层次结构中任何位置的给定报告单元相关的所有设施。

例如

  • ReportingUnit R1 具有 ReportingUnit 子 R1.1 和 R1.2
  • ReportingUnit R1.1 有子 R1.1.1、R1.1.2
  • ReportingUnit R1.2 有子 R1.2.1、R1.2.2

  • 设施 F1 有一个父报告单元 R1.1.1

  • 设施 F2 有一个父报告单元 R1.1.2
  • 设施 F3 有一个父报告单元 R1.2.1
  • 设施 F4 有一个父报告单元 R1.2.2

请记住,ReportingUnit 表中可能有 0 .. n 级递归,如果给定参数 ReportingUnit=R1,我如何从 SQL 语句中返回所有 4 个工具?

0 投票
3 回答
24314 浏览

php - 如何使用 PHP/SQL 构建树视图?

最好的方法是:

  1. 使用单个查询从数据库中获取数据
  2. 循环构建结果,例如嵌套的无序列表

我的表有id,nameparent_id列。


这是我上一个答案的更新,带有一个计数器,为每个 ul 提供一个嵌套的“级别”类,以及一些评论。

任何人都可以建议如何调整它以使用表行,而不是嵌套,但具有某种用于 css/js 钩子的类编号层次结构?

0 投票
1 回答
575 浏览

mysql - mysql select - 如何检索线程/嵌套消息的结果?

我正在创建一个线程留言板,并试图使其保持简单。有一个消息表,然后是一个回复表,其中包含一个“reply_id”字段,该字段可以为 null 以指示顶级响应,或者一个值指示线程响应。

我对如何在这种类型的表上进行 SELECT 调用有点困惑?

我知道这可能是一个复杂的问题,尤其是在性能方面,但我真的只是在寻找最基本的解决方案。

谢谢...

0 投票
19 回答
115375 浏览

algorithm - 如何有效地从平面结构中构建树?

我有一堆扁平结构的物体。这些对象具有一个ID和一个ParentID属性,因此它们可以排列在树中。它们没有特定的顺序。每个ParentID属性不一定与ID结构中的 an 匹配。因此,它们可能是从这些物体中出现的几棵树。

您将如何处理这些对象以创建结果树?

我离解决方案不远,但我确信它远非最佳......

我需要创建这些树,然后以正确的顺序将数据插入数据库。

没有循环引用。当 ParentID == null 或在其他对象中找不到 ParentID 时,节点是 RootNode

0 投票
1 回答
7749 浏览

.net - 选择时更改 TreeViewItem 的模板

我在更改用于 TreeViewItem 的 DataTemplate 时遇到了一些问题。理想情况下,我希望每个项目都包含 a TextBlock,然后在选择时应该包含 a TextBox

到目前为止,这是我所拥有的(我以这个问题为起点):

发生的情况是树中只有一个节点,节点的文本是对象的类型名称。听起来绑定到节点的类型不是模板所期望的,所以它使用默认ToString()绑定而不是Text我指定的属性。

我已经在代码隐藏文件中设置了 Window 的 DataContext。我知道我的数据绑定是正确的,因为如果我HierarchicalDataTemplate为 TreeView 设置一个,数据就会正确显示。

我认为我的问题是我需要设置样式以外的属性ItemTemplate-TreeViewItem我使用的是正确的属性,还是应该设置其他属性?

0 投票
6 回答
16650 浏览

mysql - 在数据库中实现分层数据结构

我知道有两种方法:邻接表和嵌套树。据说由于大量查询,邻接表在遍历时会变得很慢。但我不知道任何现实的数字。我正在制作的网站将有 200 页左右。生成(例如)站点地图的遍历是否会花费超过 0.3 秒的时间?

在带有 LAMP 堆栈的 MySQL (innoDB) 上运行。

如果可能的话,我更喜欢实现邻接,因为设计更简单。

谢谢。

0 投票
6 回答
2651 浏览

sql - 处理数据库中的层次结构数据

我很想知道在数据库设计方面处理层次结构的最佳方法(最佳实践)是什么。这是我通常如何处理它们的一个小例子。

节点表

祖先表

在 NodeId、AncestorId、Hops 上有索引

表如下所示:

节点表

祖先表

通过这种设计,我发现对于大型层次结构,通过加入 AncestorId = 目标 NodeId 的祖先表,我可以非常快速地获得整个层次结构部分,例如:

获得直子也很容易

我很想知道您可能为此类事情使用了哪些其他解决方案。以我的经验,层次结构可能会变得非常复杂,任何优化它们的检索的方法都非常重要。