3

假设我有一个层次结构的对象表:

A
|--B
|--C
|  +--D
+--E

它们存储在“父子”表中,因此:

parent  child
A       B
A       C
C       D
A       E

我如何查询这个以获得上面定义的结构?我想我需要一些能产生如下信息的东西:

object  full_path
A       NULL
B       A
C       A
D       A.C
E       A

我无法弄清楚如何处理嵌套超过一层的对象。感觉我可能需要遍历表(不知道这在 SQL 中是否可行),或者使用我以前从未遇到过的某种查询。

附加信息:

  1. A 不必是唯一的孤立对象。
  2. 孩子们可能有多个父母,但现在我很高兴能找到更容易解决的方案。GROUP BY我可以通过简单的andMIN语句将多父结构转换为单父结构。
4

5 回答 5

4

The other answers are correct, there is no recursive functionality in mysql. This link describes how to approach hierarchies in mysql: http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

I found the link on two other SO questions: How to do MySQL Looped Join which tests if results are complete? and Hierarchical Data in MySql .

于 2012-09-11T18:40:53.693 回答
0

基本上这行不通!

您需要定义根节点。顺便说一句,您的“树”与您的层次定义不匹配。

这将是一个更好的方法:

parent  child
-       A
A       B
A       C
C       D
-       E

减去的父条目是根节点。这反映了你的树。

Sql 不提供层次结构查询。但是你可以迭代一个技巧:

可以在这里找到一个很好的解释:

我会尝试找到根节点并使用递归来连接文本。

根节点将是:

SELECT * FRON objects WHERE parent = '-'
于 2012-09-12T23:29:06.603 回答
0

你不能用 mysql 来做,因为 mysql 不支持递归函数,但如果你不需要无限深度,你可以使用自连接来获取树。否则,您需要编程语言中的递归函数,或者您可以使用嵌套集,这样可以更轻松地选择子树。

于 2012-09-07T14:24:12.137 回答
0

MySQL 不支持递归查询。但是,如果您可以使用嵌套集来简化获取子树。

于 2012-09-07T19:36:31.443 回答
-1

如果你有一个键(varchar)mu 可以按它排序。关键值如下所示:

001
001.001
001.001.001
001.001.002
001.001.003
002
002.001
002.001
003
003.001
...
...
于 2012-09-05T11:26:42.140 回答