问题标签 [transitive-closure-table]

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 投票
1 回答
150 浏览

mysql - 传递闭包表重构

我如何能够从当前结构中检索完整树,或重构当前表结构以允许优化递归查询?

问题

无法从基础组件中检索完整的组件树而无需迭代。

单个组件可以具有未定义数量的连接(深度)。

组件没有父属性,因为每个组件都可以与多个组件相关联。

无法递归更新组件的受影响属性值。例如,如果某个组件的价格发生变化,则所有相关 components_of 的价格都会更新。

当前结构

零件

组件闭包

结果图模型:

图形

示例查询:

期望的结果(*表示递归更新的值

我想我需要将整个树关系存储在 component_closure 表中,以便能够检索所有组件的 component_of 关系并使用深度列来确定组件的顺序。虽然当不需要完整树时这似乎很浪费,例如直接 components_of。

例如:

0 投票
1 回答
73 浏览

sql - 基于传递性的数据框

我有一个数据框

我想要满足 V1 和 V2 上的传递属性的输出

0 投票
1 回答
152 浏览

php - codeigniter:闭包表 - 添加后代

我正在尝试添加一个新的后代,但在实现它时遇到困难,它会显示一些错误,如果您能花时间回顾一下我到目前为止所做的事情,将不胜感激。

这里是

控制器

模型

看法

谢谢。

错误

消息:数组到字符串的转换

0 投票
0 回答
68 浏览

php - Codeigniter: Controller issues with Closure table

I'm having issues implementing a controller for a closure table, I'm trying to INSERT a descendant.

Here's what I've done

Controller

Model

View

Error messages 1. Array to string conversion 2. Syntax error on the model after UNION.

I'm having some challenges resolving the error messages

0 投票
0 回答
63 浏览

php - 从闭包表中的模型编写控制器类

我正在尝试从模型类为闭包表编写控制器类。

试图让我的头脑进入它,但这似乎很困难。我想将条目插入到闭包表中。

这是模型:

错误信息

“UNION 的语法错误”

0 投票
1 回答
3297 浏览

sql - SQL 中图结构的闭包表等价物

这个问题How to store tree structure in sql? 导致了一个闭包表的想法,用于存储在许多方面都是最优的树。

在此处输入图像描述 在此处输入图像描述

问题是 SQL 中的图形结构是否有类似的东西。我看到了这篇论文,它似乎概述了一个图形索引结构,但它有点过头了。想知道是否有一种方法可以创建一些辅助表来处理 SQL 中对图形数据的常见查询。

0 投票
1 回答
656 浏览

mysql - 排序闭包表分层数据结构

您可以将此问题视为该问题的后续问题: 对闭包表分层数据结构中的子树进行排序

让我们考虑修改后的示例(ratingcategory表中调用了一个新行):

感谢 Bill Karwin,我能够id使用以下查询根据 's 的数字顺序对数据进行排序:

到目前为止一切顺利,现在我想使用表中的rating行对结果进行排序category。它应该是这样的:

因此,所有数据都应该同时具有breadcrumbs ASCrating DESC顺序,而不会破坏层次结构。这可以通过一个查询来实现吗?这甚至可能吗?

谢谢。

更新:

这是我迄今为止根据比尔的回答的第二部分所做的尝试:

另请注意,rating值也可以是SIGNED(负)。

可能的答案:

不使用 2 个根,请查看评论。

0 投票
1 回答
50 浏览

sql - 如何将此游标操作转换为基于闭包层次结构的集合操作?

  1. Trees.DirectReports 是一个闭包(层次结构)表。
  2. 有一个名为Users:的表RowID, EmployeeId, and MangerId@RowCount是该表中的记录数,是该表#EmpMgr的游标。

下面是我想从基于游标的操作转换为基于集合的操作的相关 sql 代码。

所以我真的很想弄清楚如何将其作为一个集合查询来执行,因为我知道这样会快得多,但我的大脑今天还没有建立正确的连接来解决这个问题。

*请注意,要回答这个问题,您需要已经了解闭包表的工作原理。否则上面的内容可能没有意义。

0 投票
0 回答
155 浏览

python - 如何用闭包表中的深度列替换额外的子表?

我正在尝试基于此博客文章实现闭包表,它具有使用 sqlalchemy 的闭包表的唯一完整和功能实现,我在这里链接只是为了给予信任,但我想替换children_table(见下面的代码示例)depthclosure_table. _

问题是我真的不知道如何为这个新列设置任何值,因为predecessorsuccessor列是通过 -class 中指定的关系自动设置的Category,我想不出有意义的搜索引擎关键字来找到线索在互联网。我试图在 sqlalchemy 文档中找到解决方案已经有一段时间了,但是很难识别适用于这个特定任务的相关部分。

如果某个 sqlalchemy 专家可以教我必须以哪种方式更改代码中的哪些部分,或者至少提示我到文档中的正确章节,这样我就可以继续尝试以更清晰的重点自己弄清楚它,那将是非常棒的。

为了澄清我想知道的内容:有类似这样的答案,它显示了如何在 SQL 中计算和设置深度值:

但最重要的问题是必须如何修改我的代码才能首先为depth-column 设置值 - 努力实现功能齐全的深度列的目标。如果有人想出了完整的解决方案,我绝对不会介意... :-)

closure_table我的运行示例中已经包含一个附加列depth,但到目前为止它只包含None

但是,所需的输出将是:

(我删除了子表的输出,因为子表将完全从代码中删除,因为它不再需要了。)

对应的图表如下所示: 粗体箭头表示子表,虚线箭头表示闭合表。

粗体箭头表示子表,虚线箭头表示闭合表。

0 投票
2 回答
1313 浏览

mysql - MySQL 5.6 具有可选深度限制的递归查询

我有两个表模式(MySQL 5.6 所以没有 CTE),大致如下所示:

在我们的设计中,两个节点之间的逻辑边(逻辑上n1 -> n2)实际上n1 -> proxy node -> n2在 db 中表示为 ( )。我们使用两条边和一个代理节点作为逻辑边的原因是我们可以在边上存储属性。因此,当客户端查询由一条边连接的两个节点时,该查询被转换为查询三个连接的节点。

我写了一个查询来获得一个固定长度的路径。例如,“给我所有的路径,以具有某些属性的节点开始,以具有某些属性的节点结束,路径上恰好有 5 条边。” 这是在 SQL 端不使用递归的情况下完成的;我只是用指定的固定长度以编程方式生成一个长查询。

挑战在于,我们希望支持对可变长度路径的查询。例如,“给我所有的路径,以具有某些属性的节点开始,以具有某些属性的节点结束,路径上不少于 3 条边且不超过 10 条边。” 如果没有(甚至有)CTE,这是否可行?

编辑:

一些样本数据:

查询可以是,“选择路径上所有节点的ID和名称,使得路径以名为'foo'的节点开始并以名为'bar'的节点结束,至少有2个节点,最多4个节点在路上。” 此类路径包括1 -> 3 -> 51 -> 3 -> 5 -> 73 -> 53 -> 5 -> 73 -> 5 -> 7 -> 9。所以结果集应该包括节点 1、3、5、7、9 的 ID 和名称。