我有一组按层次结构组织的数据,应该能够增长到任意大小。我需要检索整棵树,但我不知道如何仅使用 SQL 来完成。我目前的解决方案是创建一个临时表并使用递归函数连续查询树的分支,然后将结果存储在临时表中,我随后再次查询以产生我想要的结果。
我的问题是,我正在做的基本上是连接正确的事情?构建一个中间表,然后查询结果。似乎应该有一种方法可以通过连接来完成,但 MySQL 文档只涵盖了检索树的部分到有限深度。有没有办法做到这一点?我正在用 PHP 执行此操作。
最佳答案
MySQL 不支持递归查询。
我建议您看看 Bill Karwin 的 presentation他比较了四种不同的分层数据存储模型,并分析了它们的优缺点:
- 邻接表
- 路径枚举
- 嵌套集
- 关闭表
幻灯片 48 显示了每种模型的某些类型查询的相对难度。从您的问题来看,您似乎对“查询子树”最感兴趣,邻接列表(您当前使用的模型)在这四个中表现最差。
或者,如果您只想选择整棵树,就像表中的所有数据一样,那么您可以使用简单的查询 SELECT * FROM yourtable
并在客户端重建树结构。
关于php - 递归 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704130/