Daniel-Leung

SBP_ORG_DEPT表结构如下:

 

 

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\'));

查询结果如下图所示:

 

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

 

分类:

技术点:

相关文章:

  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-23
  • 2021-12-19
猜你喜欢
  • 2021-07-07
  • 2021-12-19
  • 2021-12-19
  • 2021-11-30
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
相关资源
相似解决方案