mysql实现树状查询_Mysql 实现树状递归查询

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

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

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

样例数据:

mysql> create table treeNodes

(id intprimary key,nodename varchar(20),pid int);

-> Query OK, 0rows affected (0.09sec)

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|

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

17rows in set (0.00sec)

树形图如下

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)

BEGIN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值