问题标签 [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 投票
1 回答
553 浏览

regex - 匹配组中除第一次和最后一次出现之外的所有字符

说我要求

在我的浏览器中。我想提取父、子以及页面名称。这是我目前使用的正则表达式。url 请求中有多少个孩子应该没有限制。目前,页面名称将始终位于末尾,永远不会被省略。

我玩得越多,我就越觉得这个解决方案有多笨拙。这是我在 ASP Classic (:() 中开发的一个小型 CMS。它有点像 MVC 路由路径。但不是基于 URL 请求调用控制器和函数。我会沿着层次结构向下移动并找到数据库中的适当页面。数据库使用嵌套集模型,并通过每个子页面的唯一页面名称链接。

我曾尝试使用 split 函数使用 / 分隔符进行拆分,但是我发现我将这么多拆分语句嵌套在一起,变得非常不可读。

总而言之,我需要一种有效的方法来从字符串中解析出父级、子级以及页面名称。有人可以提供替代解决方案吗?

老实说,我什至不确定正则表达式是否是解决我问题的最佳方法。

谢谢你。

0 投票
2 回答
3476 浏览

jquery - 寻找一个体面的 jquery 拖放树插件实现

我已经使用 PHP 和 MySQL 构建了一个递归菜单,我正在寻找一个不错的 Jquery 插件(或教程) - 以实现基于拖放的菜单重新排序。有人知道吗?

顺便提一句。我可以做相关的 PHP,我只需要可以在嵌套的 s 集中发送拖放<li>元素<ul>并发送 ajax 请求的东西。

PS我环顾四周,似乎有很多插件链接不起作用......不太确定这是我的运气不好还是只是看不起......

0 投票
1 回答
1183 浏览

mysql - 嵌套集中节点的事务安全插入?

我以嵌套集的形式将分层数据存储在 mysql 中。

我使用以下一系列 sql 语句来插入一个新节点:

这可行,但如果同时添加(接近)大量节点,则可能会出现问题。

我想知道,确保没有数据损坏的最佳方法是什么(存储过程不是一种选择)。只需将此 sql 包含在事务中就足够了吗?我应该使用事务和表锁定吗?

谢谢

0 投票
2 回答
135 浏览

ruby - 从 Ruby 中的对象数组中提取嵌套对象数组的最快方法是什么?>

我有一个元素数组,每个元素都有一个属性:image。

我想要一组:图像,那么实现这一目标的最快和最便宜的方法是什么。是否只是对数组进行迭代并将每个元素推入一个新数组,如下所示:

0 投票
1 回答
596 浏览

ruby-on-rails - 为什么这些 named_scopes 会导致重复的 INNER JOIN?

我有一个模型,我用它来使用awesome_nested_set插件跟踪分层组织中的权限。我遇到了一个问题,两个named_scopes 链接在一起时会创建一个 duplication INNER JOIN

这两个named_scopes 位于Account模型中,用于按用户和组过滤帐户:

这两个named_scopes 都需要 join memberships,但他们不应该能够做到这一点而无需重复吗?当它们链接在一起时,mysql会出现以下错误:

0 投票
1 回答
454 浏览

sql - MySQL 查询合并连接表和嵌套集

我有三个表,categoriestagstaggings。类别表以嵌套集的方式放在一起,具有相关的列idlftrgtparent_id。标签有idname。标记有tag_idtaggable_id,它指的是categories.id

如果可能的话,我想要一个在字段中返回的查询,比如tag_list一个包含类别及其所有祖先标签的字符串。因此,给定以下架构:

类别

标签

标签

我希望查询SELECT ??? FROM categories返回:

背景信息:我正在运行 Rails,我使用 Thinking Sphinx 进行搜索,并使用 awesome_nested_set 进行嵌套。我有一个名为 的表,它有categories很多关系。tagshas_many_through

0 投票
1 回答
1315 浏览

sql - 优化分层数据的视图

我目前有一个包含自联接的查询,用于从使用嵌套集模型存储公司组织信息的表中查询员工的所有直接和间接经理。在此 SQL 表示法中,以冒号开头的数字(例如:1)是变量:

通过添加加入条件或 where 子句(附带问题:哪个更快?),我可以轻松地仅返回员工之上n级的经理的 ID 。parent.depth = node.depth - :2

问题:我正在尝试将此查询转换为视图,但运气不佳。问题是我的大部分或所有变量都在我的查询的连接条件中。我目前最好的计划是将这些部分分成列,然后我可以在查询视图时使用 where 子句,例如:

您可以看到我必须发明该MgrRelativeAltitude列才能找到比员工高n级的经理的 ID,但这并不是最大的问题。我担心这会产生严重的性能问题,因为 SQL Server 似乎是按照连接条件指定的方式进行完全连接,然后通过 where 子句对其进行过滤,而不是智能地使用 where 子句来限制连接。 有没有更好的方法来创建视图?我是否应该将其保留为查询并忘记制作视图?我会通过将其设为存储过程而不是视图来获得什么吗?

请不要说“过早的优化是邪恶的”……这并不为时过早。我要替换的实现使用了诸如混蛋邻接列表之类的东西,该列表具有将员工与其直接和间接经理中的任何一个相关联的记录……最坏的情况是 O(n^2) 记录,并且可以预见地遇到严重的性能问题时我们在层级中有超过 300,000 名员工。我的新嵌套集实现将缓解这些性能问题,除了这个查询...如果您select *对建议的视图执行操作,结果将与我尝试替换的旧表几乎相同,这让我很担心非常。

0 投票
1 回答
1506 浏览

ruby-on-rails - rails awesome 嵌套集显示所有猫、子猫和子子猫

我看到了这个帖子

Ruby on Rails - 很棒的嵌套集插件

但我想知道如何在不使用节点的情况下做同样的事情?我也想知道这个节点在代码本身中到底在做什么。

在我的类别视图文件夹中,我有 _category.html.erb 和 _full_categores_list.html.erb。

_category.html.erb 具有以下代码,与上面的链接相同。

_full_categories_list.html.erb 具有以下代码。

这段代码工作得很好。但是,假设我想创建这些文件的副本,所以我可能正在制作一个 _half_categories_list.html.erb 而不是 _full_categories_list.html.erb ,它可能对代码做一些不同的事情。

如果我使用与上面在_full_categories_list.html.erb 中使用的代码类似的代码,它将继续调用_category.html.erb。

如何使用 _half_categories_list.html.erb 和 _half_category.html.erb 之类的文件而不是 _category.html.erb 来显示所有的猫、子猫和子子猫

半类别和完整类别只是名称,表明我在每个文件中都在做不同的事情。我希望这是有道理的。我想基本上复制上面链接中的代码功能,但使用 _half_category.html.erb 而不是 _category.html.erb 因为我试图在 _half_category.html.erb 文件中放置不同的功能。

0 投票
4 回答
7390 浏览

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

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


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

嵌套集
(来源:mysql.com

0 投票
1 回答
1045 浏览

sql - SQL 中的复杂聚合函数和层次结构

我想在 SQL 数据库中存储任意深度的树结构(MySQL,但想避免 DBMS 特定的功能)。现在我想为每个节点计算一个值N,如下所示:

  • 首先,计算当前节点的所有(直接)子节点中某一列的总和,这些子节点是叶子(即没有子节点)
  • 然后,计算每个剩余孩子的值N的最大值,即那些有孩子的孩子
  • 最后,将前两步的结果相加,得到当前节点的值N

显然,这涉及递归,因此嵌套集似乎是此场景的首选表示。但是,我不知道如何将上面的计算公式化为 SQL 查询。很容易得到所有后代的 SUM() 或 MAX(),但是聚合函数的组合方式使事情变得非常复杂。有没有人有办法解决吗?