问题标签 [mptt]

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 投票
4 回答
7390 浏览

sql - 如何使用 SQL 修复数据库中损坏的 MPTT 树(嵌套集)?

我有超过 100,000 条记录的 MPTT 树,使用lft,rghtparent_id列存储在 MySQL 中。现在左/右值已损坏,而父 ID 仍然完好无损。它需要大量的查询才能在应用层修复它。有没有一种好方法可以将负担放在数据库上并让它仅使用 SQL 重新计算左/右值?


澄清一下,我需要重新计算嵌套集的数字 lft/rght 值,而不是相邻记录的 id。

嵌套集
(来源:mysql.com

0 投票
1 回答
1561 浏览

django - 使用 django-mptt 复制 FeinCMS 页面树更改子顺序

我正在尝试制作 FeinCMS 页面树的副本,该页面树使用 django-mptt 进行管理。我写了这个函数:

并使用

它通常可以工作,但是当我的页面树看起来像这样时:

结果是这样的:

从我逐步浏览 mptt 代码开始,魔法似乎发生在 mptt/managers.py/_inter_tree_move_and_close_gap() 中,由于某种原因,孙子的“lft”值发生了变化。在移动之前它们是C = 3,D = 5,之后它们是C = 5,D = 3。

这解释了为什么 D 在 C 之前排序,但我不知道为什么这些值会被切换。有什么想法吗?

0 投票
1 回答
238 浏览

php - PHP需要在不修改MySql数据库的情况下显示MPTT

我有一个 MPTT 组织的 MySql 数据库,我需要显示它,没有级别限制,我无法更改数据库,我试过http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql /,但仍然让我有些头疼。

0 投票
1 回答
464 浏览

python - django-mptt 没有正确地将数据链接在一起

嘿,我正在使用MPTT从包含对话的模型中创建一些树状数据,我希望它们按“投票”字段排序。

该模型目前看起来像这样,非常基本。

如您所见,我们有一个消息字段,以及链接到 Thread 模型的父 FK 和一个投票。

在我看来,我有这个

然后在我的模板中

但是,输出的列表是所有线程的列表。它们都没有联系在一起。

有任何想法吗?

0 投票
1 回答
240 浏览

php - 按路径查询 MPTT 样式表的最有效方法是什么?

我有一个 MySQL 表,它使用 MPTT 方法存储分层数据。该表还有一列,我在其中为每一行存储一个短字符串标识符(slug)。

当给定由这些 slug 组成的路径时,我希望能够查询表以找到正确的行。即给定路径foo/bar,我想以最有效的方式找到它所代表的行。

我可以在单个 SQL 查询中执行此操作吗?如果不是,将多个查询串在一起以获得正确结果的最有效方法是什么?我在我的应用程序中使用 PHP,如果这不能完全通过 SQL 查询来完成,这可能是相关的。

0 投票
2 回答
657 浏览

mysql - (MySQL) MPTT / 嵌套集模型上的聚合函数

因此,我使用 MySQL 并将我的类别结构存储在基于嵌套集/修改的预排序树遍历模型的表名“nested_category”中,该表具有以下字段: category_id, name, lft, rgt,published

published是 1 或 0...如果是 1,那么该类别将显示在实时站点上。如果为 0,则不会显示在实时站点上,更重要的是,该未发布类别的任何子项也不会显示在实时站点上。

我在编写查询以列出所有具有 的类别published=1并忽略作为具有 的类别的后代的所有类别时遇到问题published=0

目前我正在使用:

当父母“未发布”时,我真的无法弄清楚如何让它忽略“子”类别。

我还试图将其链接到我的“new_products”表,该表具有以下字段:product_id, name, stock, price, category_id,以便我可以编写一个查询来选择所有具有published=1“已发布”类别的产品。我已经做到了这一点:

由于上面的查询使用我的第一个查询,它不会返回任何“未发布”类别或产品,但它没有考虑“已发布”类别是“未发布”类别的后代。希望这是有道理的!

0 投票
3 回答
9709 浏览

python - django-mptt get_descendants 获取节点列表

我试图获取descendants(include_self=True)的不是一个节点,而是一个节点列表(一个查询集)。这应该是一个 SQL 查询。

示例(实际上不起作用:)

我现在唯一的想法是遍历 some_nodes 并为每个节点运行 get_descendants() - 但这是一个糟糕的解决方案(大量的 SQL 查询)。

如果没有干净的方法可以通过 Django ORM 来实现,你可以为我提供一个自定义 SQL 来代替运行吗?在这里你可以假设我有一个 Node 的 pk 列表。

编辑:如果这有帮助 - 我所有的“some_nodes”都放在同一个父目录中,并且在树中具有相同的“级别”。

0 投票
2 回答
3897 浏览

python - 检索 mptt 查询集祖先查询集的高效函数

有没有人有一个有效的算法来检索一个 mptt 查询集的所有祖先?到目前为止,我能想到的最好的事情是这样的:

这种方法有两个问题:

  1. 如果有不相邻的分支(即它实际上不起作用),它会失败
  2. 它的效率非常低,因为它最终number_of_trees*number_of_levels在最终查询中包含子句,这些子句会很快变得非常大

我愿意在其他地方缓存祖先,但我想不出一种有效的方法。我考虑添加一个以逗号分隔的祖先 id 列表的字段,然后在GROUP_CONCAT额外的内部执行一个(我在 MySQL 中),但我认为这可能会变得巨大/缓慢。

0 投票
1 回答
325 浏览

php - MySQL、PHP、MPTT:按重量/成本/菜单顺序对子项进行排序

我想在“page_menu_order”行上对结果进行排序,但在同一深度内。

所以孩子们保持层次结构,但在他们的深度内,他们按成本/价格/或page_menu_order排序。

0 投票
1 回答
1493 浏览

php - 如何仅显示具有 CakePHP 树行为的产品类别?

我正在使用 CakePHP 的树行为,并且需要知道类别中是否有任何产品或其子类别,因为我不想查看空类别。

我想做这样的事情:

这将是取消设置不需要的数组维度的起点。在数据库中,分类有很多产品。

这个问题的最佳解决方案是什么?是否可以使用 category_id 在 foreach 循环中避免 Product->find?