mysql树形数据处理

Mysql处理树形数据

一、简介

在实际开发中,会遇到类似部门一样的树形数据的处理,即部门嵌套。主要是两个方面,获取某个部门的绝对路径(普元信息/企业交付部/研发部/张三),以及获取到某个部门下所有的子部门信息(获取到的子部门id用,号拼接显示)。

二、数据处理

1、树型数据处理所用到的几个函数

  1. GROUP_CONCAT函数:列转行函数,将查询出来的多个列的内容拼接成一行,并以,号分割。
    在这里插入图片描述
    在这里插入图片描述
  2. FIND_IN_SET函数:FIND_IN_SET(str1,str2),该函数用于判断str1是否存在于str2中,如果存在返回真,否则返回假。str中的多个字符串用,号分隔
    在这里插入图片描述

2、获取部门的绝对路径

给出指定的部门id,获取其父部门及祖先部门等,最后以/分割,例子如下:
亚信科技/研发部/研发一组/李四。如果要在其他语言中,做到这样并不难,一个循环,加字符串拼接,最后返回字符串就行了。但在mysql中(个人不是太熟悉mysql函数)还是觉得麻烦很多,附函数代码如下:

BEGIN
  DECLARE sParentList VARCHAR(1000);
  DECLARE sParentTemp VARCHAR(1000); 
  DECLARE sNameTemp VARCHAR(1000); 
  DECLARE sIdTemp VARCHAR(1000); 
  SET sParentTemp = CAST(rootId AS CHAR); 
  WHILE sParentTemp IS NOT NULL DO 
		IF (sParentList IS NOT NULL) THEN 
			SET sParentList = CONCAT(sNameTemp,'/',sParentList); 
		ELSE 
			SET sParentList = CONCAT(sNameTemp); 
		END IF; 
    SET sIdTemp = sParentTemp;
		SELECT GROUP_CONCAT(parentId) INTO sParentTemp FROM uump_organization WHERE FIND_IN_SET(ID,sParentTemp)>0;
    SELECT GROUP_CONCAT(name) INTO sNameTemp FROM uump_organization WHERE FIND_IN_SET(ID,sIdTemp)>0;
	END WHILE; 
	RETURN sParentList; 
 END

也是借助mysql函数,使用循环的方法,根据id以及parentid,将其name查出,最后拼接在sParentList中然后返回。代码需要理解下,在这里不做过多的描述。

3、获取某个部门所有的子部门id

给定部门id,获取其所有的子部门id,并以,号拼接。因为某个部门下的子部门很可能会有很多,还好mysql有自带的group_concat函数,否则处理起来会麻烦很多。附代码如下:

BEGIN
	DECLARE sTemp VARCHAR(1000);
  DECLARE sTempChd VARCHAR(1000);  
  SET sTemp = '$';
  SET sTempChd =cast(rootId as CHAR);
  WHILE sTempChd IS NOT NULL DO
		SET sTemp = concat(sTemp,',',sTempChd);
		SELECT group_concat(ID) INTO sTempChd FROM uump_organization WHERE FIND_IN_SET(PARENTID,sTempChd)>0;
  END WHILE;
  RETURN sTemp;
END

*注:限于编者水平,文中错误纰漏之处,欢迎大家批评指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值