MySQL递归查询树状表的子节点、父节点 您所在的位置:网站首页 mysql树形结构递归查询 MySQL递归查询树状表的子节点、父节点

MySQL递归查询树状表的子节点、父节点

2023-03-30 12:49| 来源: 网络整理| 查看: 265

表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段;

如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点。对于数据量较大的时候(我这里测试的1万条左右)。查询效率非常慢。建议在java代码中进行处理。

CREATE FUNCTION `getChildList`(rootId INT)RETURNS varchar(1000)BEGINDECLARE sChildList VARCHAR(1000);DECLARE sChildTemp VARCHAR(1000);SET sChildTemp =cast(rootId as CHAR);WHILE sChildTemp is not null DOIF (sChildList is not null) THENSET sChildList = concat(sChildList,',',sChildTemp);ELSESET sChildList = concat(sChildTemp);END IF;SELECT group_concat(id) INTO sChildTemp FROM user_role where FIND_IN_SET(parentid,sChildTemp)>0;END WHILE;RETURN sChildList;END; /*获取子节点*/ /*调用: 1、select getChildList(0) id; 2、select * 5From user_role where FIND_IN_SET(id, getChildList(2)); */CREATE FUNCTION `getParentList`(rootId INT)RETURNS varchar(1000)BEGINDECLARE sParentList varchar(1000);DECLARE sParentTemp varchar(1000);SET sParentTemp =cast(rootId as CHAR);WHILE sParentTemp is not null DOIF (sParentList is not null) THENSET sParentList = concat(sParentTemp,',',sParentList);ELSESET sParentList = concat(sParentTemp);END IF;SELECT group_concat(parentid) INTO sParentTemp FROM user_role where FIND_IN_SET(id,sParentTemp)>0;END WHILE;RETURN sParentList;END; /*获取父节点*/ /*调用: 1、select getParentList(6) id; 2、select * From user_role where FIND_IN_SET(id, getParentList(2));*/

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有