我认为答案是否定的,但我很乐意--任何人都有任何关于如何在SQL (MySQL)中爬行树结构到任何深度的洞察力,但只需使用一个查询
更具体地说,给定一个树结构表(id、data、data、parent_id)和表中的一行,是否可以使用单个查询获取所有后代(子/孙/等),或者是所有祖先(父/祖父母/祖父/等)不知道它会向下或向上走多远?
还是使用某种递归要求,在没有新结果之前,我一直在更深入地查询?
具体来说,我使用的是Ruby和Rails,但我猜这并不重要。
发布于 2008-10-04 06:55:15
是的,这是可能的,这是一个被称为修改的预顺序树遍历,最好在这里描述
这里提供了一个工作示例(用PHP)
http://www.sitepoint.com/article/hierarchical-data-database/2/
发布于 2008-10-04 05:55:05
以下是几种资源:
基本上,您需要在存储过程或查询中执行某种游标,或者构建邻接表。我将避免在db之外递归:取决于树的深度,这可能会变得非常慢/粗略。
发布于 2012-03-05 15:07:14
当你问的主要问题是“什么是我的孩子”和“我的父母都是什么”时,丹尼尔·比尔兹利的回答一点也不差。
作为对亚历克斯·温斯坦()的回应,与Celko技术相比,这种方法实际上减少了对父运动中节点的更新。在Celko的技术中,如果最左边的2级节点移动到极右的1级节点下面,那么树中的几乎每个节点都需要更新,而不仅仅是节点的子节点。
然而,我要说的是,丹尼尔可能会把这条路放回去,这样就会产生错误的结果。
我会存储它们,以便查询
SELECT FROM table WHERE ancestors LIKE "1,2,6%"这意味着mysql可以使用“祖先”列上的索引,但是它不能使用前导%。
https://stackoverflow.com/questions/169817
复制相似问题