前言:小编用了一下午都写不出java的递归统计用户个数,网上一查mysql数据库递归,总结如下:
数据表结构:
查询上级:
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempPar VARCHAR(1000);
SET sTemp = '';
SET sTempPar =rootId;
#循环递归
WHILE sTempPar is not null DO
#判断是否是第一个,不加的话第一个会为空
IF sTemp != '' THEN
SET sTemp = concat(sTemp,',',sTempPar);
ELSE
SET sTemp = sTempPar;
END IF;
SET sTemp = concat(sTemp,',',sTempPar);
SELECT group_concat(pid) INTO sTempPar FROM tbl_test where pid<>id and FIND_IN_SET(id,sTempPar)>0;
END WHILE;
RETURN sTemp;
END
查询下级:
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
SET sTemp = '$';
SET sTempChd =cast(rootId as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM tbl_test where FIND_IN_SET(pid,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
用法:
select * from tbl_test where FIND_IN_SET(id,getParLst(3)); //查上级
select * from tbl_test where FIND_IN_SET(id,getParLst2(1)); //查下级
结果:简单有效,苦逼加班到眼困了。。。伤心。。。以后再也不用担心分销系统了。。。
全CSDN的丰(好)色(se)博客,这里有书本看不到的Java技术,电影院禁播的电影,欢迎关注QQ群494808400