MySQL中的分层查询

时间:2011-11-12 11:37:10

标签: mysql hierarchical-data

我试图找到任何深度的特定领域的所有父母,祖父母等。例如,给定以下结构,如果我提供5,则返回的值应为1,2,3和4。

| a  | b  |
-----------
| 1  | 2  |
| 2  | 3  |
| 3  | 4  |
| 4  | 5  |
| 3  | 6  |
| 4  | 7  |

我该怎么做?

2 个答案:

答案 0 :(得分:24)

SELECT  @id :=
        (
        SELECT  senderid
        FROM    mytable
        WHERE   receiverid = @id
        ) AS person
FROM    (
        SELECT  @id := 5
        ) vars
STRAIGHT_JOIN
        mytable
WHERE   @id IS NOT NULL

答案 1 :(得分:-5)

以下答案不是MYSQL,而是使用PHP。这个答案对于那些在搜索期间最终出现在这个页面上的人来说非常有用(就像我一样)但不仅限于使用MYSQL。

如果您的数据库具有未知深度的嵌套结构,则可以使用递归循环打印出内容:

function goDownALevel($parent){
     $children = $parent->getChildren(); //underlying SQL function
     if($children != null){
          foreach($children as $child){
                //Print the child content here
                goDownALevel($child);
          }
     }
}

此功能也可以用Javascript等任何其他语言重写。