msql 递归查询所有父级 和子级信息

首先要说明的是表用的是树状表,即表中含有两个重要字段,即 每一条数据有id 和关联父级的 pid  

如果不是树状表或者查询量非常庞大的话 就请掠过此文!因为此种建表结合mysql函数递归查询方式数据库压力比较大!

如下是代码,表名是test   字段包含 id ,pid  ,如下函数中红色标记部分是 表名或者 字段名不同的 复制代码后可以根据自己的更改即可。


查询所有父级信息的mysql函数:

CREATE DEFINER=`root`@`localhost` FUNCTION `getParentList`(rootId varchar(100)) RETURNS varchar(1000) CHARSET utf8
BEGIN   
DECLARE fid varchar(100) default '';   
DECLARE str varchar(1000) default rootId;   
  
WHILE rootId is not null  do   
    SET fid =(SELECT pid FROM test WHERE id = rootId);   
    IF fid is not null THEN   
        SET str = concat(str, ',', fid);   
        SET rootId = fid;   
    ELSE   
        SET rootId = fid;   
    END IF;   
END WHILE;   
return str;  
END;

查询语句: select * from test where FIND_IN_SET(id,getParentList('10'));   结果为每条父类信息数组

  select getParentList('10'); 所有父类的id
 


查询所有子级信息的mysql函数:

CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(rootId varchar(100)) RETURNS varchar(2000) CHARSET utf8
BEGIN   
DECLARE str varchar(2000);  
DECLARE cid varchar(100);   
SET str = '$';   
SET cid = rootId;   
WHILE cid is not null DO   
    SET str = concat(str, ',', cid);   
    SELECT group_concat(id) INTO cid FROM test where FIND_IN_SET(pid, cid) > 0;   
END WHILE;   
RETURN str;   
END;

查询语句:select * from test where FIND_IN_SET(id,getChildList('10'));

select getChildList('10'); 所有子类的id







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值