当前位置:   article > 正文

mysql怎么找出树形的根节点_MySQL中进行树状所有子节点的查询

mysql 无限极树 查询节点属于那个根目录

转载于:http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx

Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。

在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。

但很多时候我们无法控制树的深度。这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归。本文讨论一下几种实现的方法。

样例数据:

mysql> create table treeNodes

-> (

->  id int primary key,

->  nodename varchar(20),

->  pid int

-> );

Query OK, 0 rows affected (0.09 sec)

mysql> select * from treenodes;

+----+----------+------+

| id | nodename | pid  |

+----+----------+------+

|  1 | A        |    0 |

|  2 | B        |    1 |

|  3 | C        |    1 |

|  4 | D        |    2 |

|  5 | E        |    2 |

|  6 | F        |    3 |

|  7 | G        |    6 |

|  8 | H        |    0 |

|  9 | I        |    8 |

| 10 | J        |    8 |

| 11 | K        |    8 |

| 12 | L        |    9 |

| 13 | M        |    9 |

| 14 | N        |   12 |

| 15 | O        |   12 |

| 16 | P        |   15 |

| 17 | Q        |   15 |

+----+----------+------+

17 rows in set (0.00 sec)

树形图如下

1:A

+-- 2:B

|    +-- 4:D

|    +-- 5:E

+-- 3:C

+-- 6:F

+-- 7:G

8:H

+-- 9:I

|    +-- 12:L

|    |    +--14:N

|    |    +--15:O

|    |        +--16:P

|    |        +--17:Q

|    +-- 13:M

+-- 10:J

+-- 11:K

方法一:利用函数来得到所有子节点号

创建一个function getChildLst, 得到一个由所有子节点号组成的字符串.

mysql> delimiter //

mysql>

mysql> CREATE FUNCTION `getChildLst`(rootId INT)

-> RETURNS varchar(1000

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/442170
推荐阅读
相关标签
  

闽ICP备14008679号