递归MySQL查询?

Jos*_*sto 2 php mysql tree recursion infinite

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

我的问题是,我正在做的基本上是一个连接是否正确?构造一个中间表,然后查询结果.似乎应该有一种方法来使用连接,但MySQL文档仅涵盖检索树的部分到有限深度.有没有办法做到这一点?我在PHP中这样做.

Mar*_*ers 15

MySQL不支持递归查询.

我建议你看看Bill Karwin的演讲,他比较了四种不同的存储层次数据的模型,并看看它们的优缺点:

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

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

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