mysql 树形结构查询(存储过程)
16lz
2021-01-22
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!)
可直接运行(去除注解)
存储过程:
- DELIMITER//
- dropprocedureifexistsfindLChild//
- /*iid递归父节点,layer允许递归深度*/
- CREATEPROCEDUREfindLChild(iidbigint(20),layerbigint(20))
- BEGIN
- /*创建接受查询的临时表*/
- createtemporarytableifnotexiststmp_table(idbigint(20),namevarchar(50))ENGINE=InnoDBDEFAULTCHARSET=utf8;
- /*最高允许递归数*/
- SET@@max_sp_recursion_depth=99;
- calliterative(iid,layer);/*核心数据收集*/
- select*fromtmp_table;/*展现*/
- droptemporarytableifexiststmp_table;/*删除临时表*/
- END;//
- DELIMITER;
- DELIMITER//
- dropprocedureifexistsiterative//
- 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中在表中insert数据时,有重复主键id时,变成update
- MySQL在保存数据时添加时间戳
- Spring Security ACL使用MySQL配置与数据库脚本
- 需要从mysql数据库中获得productdata。
- 数据库行转列和列转行小例子
- 加载数据INFILE不工作。
- MySQL数据库储存bit类型的值报错
- 多个mysql数据库怎么指定到多个不同文件目录
- 一步一步学MySQL----9 条件数据记录查询