mysql 存储过程 树结构_mysql 树形结构查询(存储过程)_MySQL

就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!)

可直接运行(去除注解)

存储过程:

DELIMITER//

dropprocedureifexists findLChild//

/*iid递归父节点,layer允许递归深度*/

CREATEPROCEDUREfindLChild(iidbigint(20),layerbigint(20))

BEGIN

/*创建接受查询的临时表*/

createtemporary tableifnotexiststmp_table(idbigint(20),namevarchar(50))ENGINE=InnoDBDEFAULTCHARSET=utf8;

/*最高允许递归数*/

SET@@max_sp_recursion_depth=99;

calliterative(iid,layer);/*核心数据收集*/

select*fromtmp_table;/*展现*/

droptemporary tableif exists tmp_table;/*删除临时表*/

END;//

DELIMITER;

DELIMITER//

dropprocedureifexists iterative//

CREATEPROCEDUREiterative(iidbigint(20),layerbigint(20))

BEGIN

declaretidbigint(20)default-1;

declaretnamevarchar(50)charactersetutf8;

/*游标定义*/

declarecur1CURSORFORselectid,namefromlocationwherefid=iid;

declareCONTINUEHANDLERFORSQLSTATE'02000'SETtid=null;

/*允许递归深度*/

iflayer>0then

OPENcur1;

FETCHcur1INTOtid,tname;

WHILE(tidisnotnull)

DO

/*核心数据收集*/

insertintotmp_tablevalues(tid,tname);

calliterative(tid,layer-1);

FETCHcur1INTOtid,tname;

ENDWHILE;

endif;

END;//

DELIMITER;

//运行!!

mysql> call findLChild(1,1);

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

| id  | name       |

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

|  2 | 北京       |

|  4 | 上海       |

|  6 | 香港特别行政区  |

|  8 | 澳门特别行政区  |

|  10 | 河北       |

|  23 | 山西       |

|  35 | 辽宁       |

|  50 | 吉林       |

|  60 | 黑龙江      |

|  74 | 江苏       |

|  88 | 浙江       |

| 101 | 安徽       |

| 119 | 福建       |

| 129 | 江西       |

| 142 | 山东       |

| 160 | 河南       |

| 179 | 湖北       |

| 198 | 湖南       |

| 213 | 广东       |

| 235 | 甘肃       |

| 250 | 四川       |

| 272 | 贵州       |

| 282 | 海南       |

| 301 | 云南       |

| 318 | 青海       |

| 327 | 陕西       |

| 348 | 广西壮族自治区  |

| 363 | 西藏自治区    |

| 371 | 宁夏回族自治区  |

| 377 | 新疆维吾尔自治区 |

| 400 | 内蒙古自治区   |

| 413 | 台湾省      |

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

32 rows in set (0.02 sec)

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值