【问题标题】:SQL recursive: select all childs from a given node in a treeSQL递归:从树中的给定节点中选择所有子节点
【发布时间】:2012-02-10 18:25:58
【问题描述】:

编辑:阅读您的一些答案后,我注意到我不需要递归,但需要一些查询来处理树。我目前正在阅读以下帖子http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,它提供了我不知道的基本概念和正确的方法。非常感谢,我会继续阅读发布的链接:)

我正在研究一棵树,其中每个节点都可以有子节点。每个节点都有自己的子节点自动生成的 node_id 来引用其父节点。一个简单的表格示例如下:

如果不存在`arbres`,则创建表( `node_id` int(11) NOT NULL AUTO_INCREMENT, `pare_id` int(11) 默认为空, 主键(`node_id`), ) 引擎=InnoDB 默认字符集=utf8 AUTO_INCREMENT=470 ; ALTER TABLE arbres ADD CONSTRAINT FK_E6A4F221A4467B16 FOREIGN KEY (pare_id) REFERENCES arbres(node_id) ON DELETE CASCADE;

我正在尝试的是在单个查询中找到一个能够选择每个孩子等等的查询,我的意思是孩子的孩子、孩子的孩子的孩子等等。我对 sql 很陌生,所以我可以用多个 sql 语句来完成它,这不是一个好主意。谢谢你的时间。

【问题讨论】:

标签: mysql sql


【解决方案1】:

最好的办法是基于节点遍历树。由于没有保证您的树将具有多少级别,因此尝试查找一个查询可能不是很好的做法。一个查询或过程多次返回给定父级的子级并没有错,例如:

select node_id from arbres where pare_id = 1

假设你的根是 pare_id =1 然后对返回的每个节点执行相同的操作。如果没有返回节点,那么您知道您的最后一个节点是叶子。

如果您真的需要在一个查询中实现所有这些,只需执行

select * from arbres

并重新构建您使用的任何编程语言的树。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多