我正在寻找一种非递归解决方案来进行MySQL查询,以选择节点的所有叶节点(子节点、孙子节点等),同时只知道节点的直接子节点是谁。
目前,我有以下表格:
节点:
关系:
按照目前的方式,我只能选择父节点的直接子节点(在本例中,让父Id = 1):
SELECT * FROM Nodes n
JOIN Relationships r ON r.childId = n.id
WHERE r.parentId = 1
ORDER BY r.childNodeOrder;
是否有任何方法可以轻松地将这个数据库更改为,而不是,使用递归调用(在服务器端代码上),并能够获取父级的所有子代叶子?
到目前为止,我已经看过像this one这样的问题,这些问题看起来像是一个根本性的变化,而且不太容易切换.
发布于 2012-11-28 16:26:08
参见嵌套的SET数据模型,在这里可能会有所帮助。
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
编辑:由于需要更多的上下文,下面是详细信息。
父节点将具有覆盖范围左、右的左和右属性。
所有子节点都将包括在该范围内,以便:
parent.left <= child.left <= child.right <= parent.right.
所有叶节点的范围为1,因此左+1=右仅适用于叶。
要从父母那里获取所有的叶子,请使用类似于以下内容的where子句:
其中(左+1=右)和(左>= parent.left)和(右<= parent.right)
https://stackoverflow.com/questions/13608925
复制相似问题