根据用户id查询树结构组织的存储过程(当前节点及点钱节点以下数据)
作者:互联网
1.表结构: 用户信息表 组织信息表 用户信息月组织信息关联表 == 一个用户可能有多个节点,一个节点可能有多个子节点
2.思路:创建中间表将查到的数据存储到中间表(循环调用递归查下级组织)
DELIMITER //
drop procedure if exists findAllChild //
CREATE PROCEDURE findAllChild(layer bigint,userId bigint)
/* layer 允许递归深度 , userId cscp_user_org 的user_id */
BEGIN
DECLARE s int DEFAULT 0; /*循环终止条件*/
declare orgId bigint;/*父级组织id*/
declare orgName varchar(50) character set utf8;
/* 游标定义 */
declare report CURSOR FOR select co.id,co.org_name from app_admin.cscp_user_org uo,app_admin.cscp_org co where uo.org_id =co.id and uo.user_id = userId ;/*orgid集合*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s= -1; /*当遍历到最后一条时把s赋值-1*/
/*创建接受查询的临时表 */
create temporary table if not exists tmp_table(id bigint,name varchar(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
open report; /**放开游标**/
fetch report into orgId,orgName; /*将集合的值赋值到变量*/
insert into tmp_table values(orgId,orgName);
while s <> -1 do /*当s!=-1时执行*/
/* 核心数据收集 */
call findLChild(orgId,layer);
fetch report into orgId,orgName; /*设置下一个变量值*/
end while; /*结束循环*/
close report; /*关闭游标*/
select DISTINCT(id),name from tmp_table ;/* 如果一个用户在该节点及子节点都有会有重复数据 去重展现 */
drop temporary table if exists tmp_table ;/*删除临时表*/
END;//
drop procedure if exists findLChild//
/* iid 递归父节点 , layer 允许递归深度 */
CREATE PROCEDURE findLChild(iid bigint,layer bigint)
BEGIN
/*最高允许递归数*/
SET @@max_sp_recursion_depth = 99 ;
call iterative(iid,layer);/*核心数据收集*/
END;//
drop procedure if exists iterative //
CREATE PROCEDURE iterative(iid bigint,layer bigint)
BEGIN
declare tid bigint default -1 ;
declare tname varchar(50) character set utf8;
/* 游标定义 */
declare cur1 CURSOR FOR select id,org_name from app_admin.cscp_org where parent_id=iid ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tid = null;
/* 允许递归深度 */
if layer>0 then
OPEN cur1 ;
FETCH cur1 INTO tid,tname ;
WHILE ( tid is not null )
DO
/* 核心数据收集 */
insert into tmp_table values(tid,tname);
call iterative(tid,layer-1);
FETCH cur1 INTO tid,tname ;
END WHILE;
end if;
END;//
DELIMITER ;
标签:layer,及点,树结构,节点,bigint,table,declare,org,id 来源: https://www.cnblogs.com/xxmmllcc/p/16207251.html