gpt4 book ai didi

mysql - 有什么方法可以让我在只知道父 ID 的情况下通过一个查询获得一棵树?

转载 作者:行者123 更新时间:2023-11-29 00:37:40 25 4
gpt4 key购买 nike

我正在寻找一种非递归解决方案来进行 MySQL 查询以选择节点的所有叶节点(子节点、孙节点等),同时只知道节点的直接子节点是谁。

目前我有以下表格:

Nodes:

  • id (INT)
  • data (VARCHAR)

Relationships:

  • parentId (INT)
  • childId (INT)
  • childNodeOrder (INT)

我目前的方式只能选择父节点的直接子节点(对于此示例,让父节点 Id = 1):

SELECT * FROM  Nodes n
JOIN Relationships r ON r.childId = n.id
WHERE r.parentId = 1
ORDER BY r.childNodeOrder;

有什么方法可以让我轻松地更改此数据库,以使用递归调用(在我的服务器端代码上)并能够获取父项的所有后代叶子?

到目前为止,我已经看过类似 this one 的问题这似乎是一个根本性的改变,而且不太容易切换......

最佳答案

请参阅 NESTED SET 数据模型,它可能在这里有所帮助。

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

编辑:由于需要更多上下文,这里是详细信息。

父节点将具有覆盖范围 [left, right] 的 left 和 right 属性。

所有子节点都将包含在该范围内,因此:

parent.left <= child.left <= child.right <= parent.right.

所有叶节点的范围都是 1,因此 left + 1 = right 仅适用于叶子。

要从父节点获取所有叶子,请使用与此类似的 where 子句:

WHERE (left + 1 = right) AND (left >= parent.left) AND (right <= parent.right)

关于mysql - 有什么方法可以让我在只知道父 ID 的情况下通过一个查询获得一棵树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com