mysql 获取根节点_MySQL向上递归,根据子节点查询父节点(根节点)的函数搭配改造的SQL语句的实现...
发布日期:2021-06-24 14:53:43 浏览次数:3 分类:技术文章

本文共 1165 字,大约阅读时间需要 3 分钟。

SBP_ORG_DEPT表结构如下:

8878c28a50865eadd884ed303a2dea18.png

MySQL

用函数 也可解决这种需求问题。

group_concat 不适用数据较多的时候。

函数getParentNodesFromChildNode如下所示(在MySQL数据库中新建函数):

CREATE FUNCTION `getParentNodesFromChildNode`(rootId varchar(1024),sbp_org_dept varchar(256)) RETURNS varchar(1024) CHARSET utf8

BEGIN

DECLARE nParentList VARCHAR(10000);

DECLARE nParentTemp VARCHAR(10000);

SET nParentTemp = rootId;

WHILE nParentTemp IS NOT NULL DO

IF (nParentList IS NOT NULL) THEN

SET nParentList = CONCAT(nParentTemp,',',nParentList);

ELSE

SET nParentList = CONCAT(nParentTemp);

END IF;

SELECT GROUP_CONCAT(parent_id) INTO nParentTemp FROM sbp_org_dept WHERE FIND_IN_SET(id,nParentTemp)>0;

END WHILE;

RETURN nParentList;

END

注:sbp_org_dept 是MySQL库中真实存在的表,parent_id和id是sbp_org_dept 表中真实存在的列!

-- 后台调用:

(改造前的SQL语句):SELECT * from SBP_ORG_DEPT d start with id = #{deptId} connect by d.id = prior d.parent_id;

(改造后的SQL语句):SELECT *  from  SBP_ORG_DEPT where FIND_IN_SET( id , getParentNodesFromChildNode( #{deptId} , 'SBP_ORG_DEPT') );

注:#{deptId},是后台映射传参进来的参数,参数名一定要一致!!!

eg: select * from SBP_ORG_DEPT where FIND_IN_SET(id,getParentNodesFromChildNode('1788051', 'SBP_ORG_DEPT'));

查询结果如下图所示:

e9fe4f044a42d040ab8ac80e768b8608.png

注:因为父节点id为0的数据为空(数据不完善的原因),所以根节点只递归到1787626!

转载地址:https://blog.csdn.net/weixin_33478634/article/details/113269871 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql 1217_MySQL主从复制中断报error code=1217错误解决
下一篇:mysql table 更新_mysql table 最新更新时间

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月24日 17时16分23秒