问题标签 [nested-set-model]

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 投票
0 回答
392 浏览

symfony-1.4 - 查询时如何订购 Doctrine Nested Set Tree

我有一个充当嵌套集的表。问题是,该表具有字段“short_name”和“long_name”,并且在不同的地方我必须相应地对结果进行排序。

查询树时,我正在使用 Doctrine 的“HYDRATE_RECORD_HIERARCHY”水合模式。问题是:据我所知,这种水合模式在查询必须包含 orderBy 子句“ORDER BY lft ASC”方面受到限制

有什么方法可以获得排序的结果集,还是在返回查询后我必须应用某种类型的排序?

因为我要返回一个 Doctrine Collection(我真的很想远离数组表示),所以之后对其进行排序并不是那么简单。

0 投票
1 回答
2744 浏览

python - 使用 SQLAlchemy 使用子查询进行批量更新

我正在尝试使用 SQLAlchemy 实现以下 MySQL 查询。有问题的表是嵌套集层次结构。

这工作得很好。

这是我开始拔头发的地方:

...我明白了InvalidRequestError: This operation requires only one Table or entity be specified as the target。在我看来,它Category.depth充分指定了目标,但当然 SQLAlchemy 胜过我的想法。

难住了。有什么建议么?谢谢。

0 投票
0 回答
60 浏览

php - 从表中删除行会导致在另一个表中删除

我有 2 个表:类别表和产品表。

与外部键没有直接关系,因此在 SQL 中没有依赖关系。Products 表包含一个名为 category_id 的字段,只是为了在我的视图中与 categories 表进行连接。

这里的问题:

当我在 php 中执行此过程时:

类别及其所有叶子都已正确删除,但在字段“category_id”中包含已删除类别 ID 之一的产品行也将被删除!

这是一个 SQL 问题还是我没有考虑到的问题?

0 投票
0 回答
185 浏览

php - 使用 Doctrine "Tree" 扩展按类别获取产品

我目前拥有Product和实体,通过产品的属性Category具有多对一的关系。category该类别有一个使用@Gedmo\Slug注释定义的 slug,它运行良好。

不幸的是,关于 slug 的Tree 扩展在 Github 上的文档相当简短,尤其是它们的选择。我已经尝试了很多谷歌结果,但还没有找到解决方案。

我想知道的是,如何获取给定类别 slug该 slug 的子类别中的所有产品?

有人可以帮忙吗?

0 投票
1 回答
139 浏览

sql - 对随时间变化的嵌套数据集建模的建议

我正在寻找有关创建时间嵌套数据集模型的建议。我正在尝试提高阅读部分的性能。我有一个大约 100 万个节点的节点树,经常有 20 多个节点的深度。树存储可以随时间变化的类别,并能够输入未来的变化。

当前的数据结构是时间相邻节点模型,使用简单的数据结构对节点树随时间的变化进行建模是微不足道的:

节点
nodeID
[数据]


parentNodeId
childNodeId
validFromDate
validToDate

嵌套数据集可以实现非常快速的读取操作,但我目前对嵌套集的理解不支持随时间对树进行更改

节点
nodeId
左右
[
数据]

我的一个想法是创建一系列“嵌套图”,它们反映给定时间点的左/右值,但这意味着只要对单个随时间变化进行建模,就重新创建整个节点树,这将使由于频繁更改,“Nests”数据集的大小太大。

嵌套
nodeId
左右 validFromDate validToDate
_

有没有人创建过时间嵌套数据集模型,或者知道关于这个主题的任何好的资源?

0 投票
2 回答
944 浏览

mysql - CONCAT 类别的所有父项

示例数据库(嵌套集模型中的类别):

我想像这样获得底部子类别的所有父母(可能是 concat?):

除了玩 BETWEEN lft AND rgt 和 CONCAT 之外,我还很困惑,可以使用一些技巧和信息来获得所需的结果。谢谢!

SQL小提琴

0 投票
1 回答
2169 浏览

php - 嵌套集如何确定左右节点

这是 mysql 的嵌套集合模型。

假设_lftand_rgt是指示左右值的字段

如我所见,价值越低,孩子就越左?所以这里我们从左侧得到 2 个孩子,从右侧得到 2 个孩子,是否可以在不添加新字段(例如direction在插入之前指示孩子方向)的情况下做到这一点?

我想仅使用_lftand来确定这一点_rgt,我无法弄清楚逻辑是什么,即使是在文字中,也不需要代码

我怎样才能只查询那些相对于父母属于左侧的孩子?

请有任何建议,谢谢。

0 投票
3 回答
368 浏览

mysql - 使用“in”慢速连接和子查询的 SQL 嵌套集查询

我对嵌套集结构的查询遇到了一些问题,速度很慢(约 4 秒)

解释返回以下内容:

我认为子查询in()使查询变慢。有一个更好的方法吗?

谢谢。

编辑:

我忘记left在子查询中删除 from join 。

0 投票
1 回答
1475 浏览

php - MySQL Nested Set Model with Laravel Relationships

Good evening!

I am working on a package that is supposed to allow Laravel to have relationships based on MySQL Nested Set Model (lft and rgt keys).

Legend: X, Y, Z, A, B, C are integer numbers.

Let's assume that we want to use this with eshop categories.

My first task is to create a parent relation. I have managed to create a relation that finds a parent of a current category. My query looks like:

This works perfectly correct. But, the problem appears when I want to load, let's say, 100 categories. Then, it is one sql query for 100 categories:

and one sql query for a parent of each category:

That is 101 sql queries in total.

Here is where the problem part comes. I want to use a technique called Eager Loading (merging all relationship queries into one query). But how to do that?

Solution no. 1

My first solution was to collect all lft and rgt keys from:

and create query that looks like this:

but, this solution does not work at all. It returns all parents of the categories.

Solution no. 2

Then, I tried to make it work properly by using this method. An original query looks the same.

But loading the parents is quite different:

This query returns only relevant results, which is perfect, BUT to add a parent to its child, I have to run (on a PHP side) foreach cycle through all of the results of the original query (select * from categories limit 100) and inside that foreach I have to run another that iterates over every parent (from the original query) and inside the second foreach, there is a comparsion logic, that makes 10 000 (100 * 100) cycles plus the comparsion = looooooooooooong execution.

Solution no. 3

So I thought of another solution, which is the best in my opinion. It is just an improvement to the second solution.

Original query:

Relation query:

So, now, on the PHP side I have one array that contains results from the original query (100 items) and an array that contains results from the relation query (100 items). The improvement is that, now, every parent result contains lft and rgt key of an category that requested it (child_lft and child_rgt). Now, the PHP script is much faster. First I create a new array (let's name it $parents) that contains all parents, and every items key (key of value in $parents) is code (child_lft.child_rgt => 1.5) that identifies the category that requested it. This is a foreach that iterates 100 times. The second foreach iterates through the results from the original query and checks if $parents array contains a value with a key that suits its lft and rgt keys. So another 100 iterations. It total, 200 iterations = perfect ! But a 'relation query' is not as fast as I want it to be.

So, is there another way how to do that? Or is there a way how to make my sql query in the solution no. 3 faster?

Thank you just for reading it. Thanks!

0 投票
1 回答
2564 浏览

php - 从嵌套集模型结构为 Fancytree 创建 JSON

我想用 jquery 插件 Fancytree 显示一个数据结构。在 Google 中进行了长时间的搜索后,似乎在数据库中存储数据结构的最佳方式是嵌套集模型(在 Stackoverflow 上描述为php/Mysql best tree structure)。但是制作这种结构的相关嵌套JSON来显示是相当困难的,我做不到..

这包括转换以下 MySQL 表:

| 类别 ID | 姓名 | 半边天 | rgt | 深度 |

| 1 | 电子产品 | 1 | 20 | 0 |

| 2 | 电视 | 2 | 9 | 1 |

| 3 | 管 | 3 | 4 | 2 |

| 4 | 液晶显示器 | 5 | 6 | 2 |

| 5 | 等离子 | 7 | 8 | 2 |

| 6 | 便携式电子产品 | 10 | 19 | 1 |

| 7 | MP3 播放器 | 11 | 14 | 2 |

| 8 | 闪存 | 12 | 13 | 3 |

| 9 | CD 播放器 | 15 | 16 | 2 |

| 10 | 2 路收音机 | 17 | 18 | 2 |

进入这个 JSON:

我想知道是否存在将 MySQL 数据转换为分层嵌套 JSON 的简单方法?谢谢!