如何有效地检索树中节点的路径(与帖子“将平面表解析为树?”相关)
这个问题是这篇文章的后续问题:
我喜欢 ClosureMap 解决方案,但我还有一个问题需要解决。
如何轻松检索树中特定节点的路径? 例如,如果您查看提供的树:
ID Node Name
1 'Node 1'
2 '节点 1.1'
3 '节点 2'
4 '节点 1.1.1'
5 '节点 2.1'
6 'Node 1.2'
到 1.1.1 的路径将是:
ID = 1, 2, 4
在不进行递归 SQL 调用的情况下,是否有一种优雅的方法来检索路径?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
返回值 1、2、4。但是它们在单独的行上返回,并且没有表明它们的顺序正确(我们可能不假设数字顺序对应于树层次结构顺序)。
有时,您还会将每个路径的深度存储在
ClosureTable
中。 但即使没有,您也可以计算给定节点有多少个祖先,并使用它进行排序:是的,这仍然返回三行结果。 如果您使用 MySQL,则可以访问
GROUP_CONCAT()
。 否则,很容易获取三行并在应用程序代码中连接它们的值。Returns the values 1, 2, 4. But they are returned on separate rows, and they give no indication that they're in the right order (we might not assume numerical order corresponds to tree hierarchy order).
Sometimes you would also store the depth for every path in the
ClosureTable
. But even if not, you can count how many ancestors a given node has, and use that to sort:Yes, this still returns the result in three rows. If you use MySQL, you have access to
GROUP_CONCAT()
. Otherwise it's easy to fetch three rows and concatenate their values in application code.我想我找到了最好的解决方案,但并没有真正意识到它就在我提到的帖子中:)。
Site Point 有一篇很好的文章,展示了如何使用左/右属性检索特定节点:
http://www.sitepoint.com/article/hierarchical-data-database/2/
I think I found the best solution, and didn't really realize it's in the post I referred to :).
Site Point had a nice article that shows the how to retrieve a specific node using the Left/Right attributes:
http://www.sitepoint.com/article/hierarchical-data-database/2/