MySQL中的分层查询

11 mysql hierarchical-data

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

| a  | b  |
-----------
| 1  | 2  |
| 2  | 3  |
| 3  | 4  |
| 4  | 5  |
| 3  | 6  |
| 4  | 7  |
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Qua*_*noi 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
Run Code Online (Sandbox Code Playgroud)

  • @MichaelJMulligan:这个查询可以随时停止工作,因为它依赖于某些行为(在每一行重新评估`@ id`为'WHERE`条件,在开头单独评估`@id:= 5`查询等)在MySQL文档中未指定,并且可能随任何次要版本升级而更改.即使没有版本升级,您也无法确定这些是如何工作的.整个查询基本上都是一个黑客. (4认同)
  • @Wiliam:它不是升级安全的,因为`MySQL`没有明确定义会话变量行为.但是,这是在查询中及时处理邻接列表的唯一方法. (2认同)