php - 递归 MySQL 查询?

标签 php mysql recursion tree infinite

我有一组按层次结构组织的数据,应该能够增长到任意大小。我需要检索整棵树,但我不知道如何仅使用 SQL 来完成。我目前的解决方案是创建一个临时表并使用递归函数连续查询树的分支,然后将结果存储在临时表中,我随后再次查询以产生我想要的结果。

我的问题是,我正在做的基本上是连接正确的事情?构建一个中间表,然后查询结果。似乎应该有一种方法可以通过连接来完成,但 MySQL 文档只涵盖了检索树的部分到有限深度。有没有办法做到这一点?我正在用 PHP 执行此操作。

最佳答案

MySQL 不支持递归查询。

我建议您看看 Bill Karwin 的 presentation他比较了四种不同的分层数据存储模型,并分析了它们的优缺点:

  • 邻接表
  • 路径枚举
  • 嵌套集
  • 关闭表

幻灯片 48 显示了每种模型的某些类型查询的相对难度。从您的问题来看,您似乎对“查询子树”最感兴趣,邻接列表(您当前使用的模型)在这四个中表现最差。

或者,如果您只想选择整棵树,就像表中的所有数据一样,那么您可以使用简单的查询 SELECT * FROM yourtable 并在客户端重建树结构。

关于php - 递归 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704130/

相关文章:

c# - 使用与安装的连接器不同的 MySql.Data 版本

mysql - MariaDB 相关子查询中 DateTimes 的截断

c# - C#纸牌游戏中的最佳纸牌选择

C++:模板化继承递归类:不可能的三重威胁?

php - 按字母顺序对 MYSQL 结果进行升序排序,但不将 'The' 排序为 T?

recursion - 编译器用多态递归函数耗尽内存

PHP:按值拆分 MySQLi 结果

php - 教义2 : Lazy loading fails and I have to re-initialize the class

php - Zend Framework - 本地主机上的 utf8 正常 - 网络服务器上的 utf8 失败

javascript - 如何在 jQuery AJAX 成功时强制下载文件?