首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归MySQL查询?

问递归MySQL查询?
EN

Stack Overflow用户
提问于 2010-09-14 04:27:40
回答 2查看 3.1K关注 0票数 2

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

我的问题是,我所做的本质上是连接所正确做的?构造一个中间表,然后查询结果。看起来应该有一种使用joins的方法,但MySQL文档只涵盖了检索树的有限深度的部分。有没有办法做到这一点?我用PHP做这件事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-14 04:33:56

MySQL不支持递归查询。

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

  • Path sets
  • 闭包列表

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

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

票数 15
EN

Stack Overflow用户

发布于 2010-09-14 04:35:51

需要更多数据..该表是只表示一棵树,还是表示多棵树?如果是一棵树,您可以从表中选择所有内容,然后在内存中构建树结构。如果是多个树,您可以考虑为每个树元素添加一个treeID,以表示该元素所属的树。

如果要选择树的一个分支,可以考虑存储具有顺序整数“排序等级”和指向左右节点的链接的元素,然后选择最左侧节点和最右侧节点整数范围内的所有节点。

有关此存储模型的详细信息,请查看邻接列表。您还可以创建混合邻接列表/父节点链接,因为数据存储非常便宜,但您可能会有更多的开销来保持排序链接的更新...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3704130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档