首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在单个查询中以任何深度查询MySQL中的树结构表?

是否可以在单个查询中以任何深度查询MySQL中的树结构表?
EN

Stack Overflow用户
提问于 2008-10-04 05:42:04
回答 9查看 39.9K关注 0票数 58

我认为答案是否定的,但我很乐意--任何人都有任何关于如何在SQL (MySQL)中爬行树结构到任何深度的洞察力,但只需使用一个查询

更具体地说,给定一个树结构表(id、data、data、parent_id)和表中的一行,是否可以使用单个查询获取所有后代(子/孙/等),或者是所有祖先(父/祖父母/祖父/等)不知道它会向下或向上走多远?

还是使用某种递归要求,在没有新结果之前,我一直在更深入地查询?

具体来说,我使用的是Ruby和Rails,但我猜这并不重要。

EN

回答 9

Stack Overflow用户

发布于 2008-10-04 06:55:15

是的,这是可能的,这是一个被称为修改的预顺序树遍历,最好在这里描述

Joe在SQL for Smarties中的树和层次结构

这里提供了一个工作示例(用PHP)

http://www.sitepoint.com/article/hierarchical-data-database/2/

票数 37
EN

Stack Overflow用户

发布于 2008-10-04 05:55:05

以下是几种资源:

基本上,您需要在存储过程或查询中执行某种游标,或者构建邻接表。我将避免在db之外递归:取决于树的深度,这可能会变得非常慢/粗略。

票数 23
EN

Stack Overflow用户

发布于 2012-03-05 15:07:14

当你问的主要问题是“什么是我的孩子”和“我的父母都是什么”时,丹尼尔·比尔兹利的回答一点也不差。

作为对亚历克斯·温斯坦()的回应,与Celko技术相比,这种方法实际上减少了对父运动中节点的更新。在Celko的技术中,如果最左边的2级节点移动到极右的1级节点下面,那么树中的几乎每个节点都需要更新,而不仅仅是节点的子节点。

然而,我要说的是,丹尼尔可能会把这条路放回去,这样就会产生错误的结果。

我会存储它们,以便查询

代码语言:javascript
复制
SELECT FROM table WHERE ancestors LIKE "1,2,6%"

这意味着mysql可以使用“祖先”列上的索引,但是它不能使用前导%。

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

https://stackoverflow.com/questions/169817

复制
相关文章

相似问题

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