mysql利用函数递归查询所有的下级以及下级处于的层级

直接看sql

begin
declare childs longtext;
declare tempchildids longtext;
declare tempparentids longtext;
declare otempc int(11);

set childs = '';
set tempchildids='';
set tempparentids=concat(pid,'');
set otempc = 0;

while tempparentids is not null and tempparentids !=''
do
set otempc =otempc+1;
set childs = concat(childs,if(tempchildids='','',concat(',',tempchildids)));
select group_concat(concat(id,'-',otempc)),group_concat(id) into tempchildids,tempparentids from m_member where parent_id is not null and find_in_set(parent_id,tempparentids);
end while;
return childs;
end

其中pid为最顶层用户id,作为函数参数。运行结果如下:
在这里插入图片描述
结果的结构为 用户id-层级,再执行程序运算时可以逗号‘,’劈开为数组进行遍历,再以’-‘进行分割,就可以算出所有下级及所处层级。
如果是在MySQL 中 可以利用FIND_IN_SET()函数去匹配用户id做关联查询条件,如下

#注意substr(结果,2)去除前面逗号,再将 ’-‘替换为’,-‘,最终为 4,-1,39,-1
#在id关联匹配时则只有 4 39 会关联到,层级的 -1或 -5不会关联,只要数据id不为-1、-5这样的就没问题
FIND_IN_SET(user_id,replace(substr(getallchilds(8),2),'-',',-'))

在这里记录,分享一下,以便以后查看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值