mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构


Posted in MySQL onApril 20, 2022

前言

查询上下级机构,这个功能可能会在日常工作中遇到,如果使用的oracle数据库,那就很简单,只需要使用oracle提供的层级查询即可实现。如果使用的mysql数据库,那么就需要自己实现这个功能。下面就介绍mysql实现上下级机构查询。

思路:

  • 自定义mysql方法
  • 利用mysql中的【FIND_IN_SET】【group_concat】两个方法

(1)准备测试数据表

CREATE TABLE `org_test` (
  `org_no` varchar(32) NOT NULL COMMENT '机构编号',
  `org_name` varchar(200) NOT NULL COMMENT '机构名称',
  `p_org_no` varchar(32) DEFAULT NULL COMMENT '上级机构编号',
  PRIMARY KEY (`org_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

测试数据

INSERT INTO `org_test` VALUES ('1001', '福建省', null);
INSERT INTO `org_test` VALUES ('100101', '厦门市', '1001');
INSERT INTO `org_test` VALUES ('10010101', '思明区', '100101');
INSERT INTO `org_test` VALUES ('10010102', '湖里区', '100101');
INSERT INTO `org_test` VALUES ('10010103', '同安区', '100101');
INSERT INTO `org_test` VALUES ('100102', '福州市', '1001');

(2)查询指定机构的所有下级机构(包括自身)

delimiter $$
CREATE FUNCTION getOrgChild (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定义临时变量
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 循环查询,orgNo不为空,则循环
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查询结果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查询数据
		SELECT group_concat(org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(p_org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回结果
	RETURN tmpOrg;
END $$

测试结果:

mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构

(3)查询指定机构的所有上级机构(包括自身)

delimiter $$
CREATE FUNCTION getOrgParent (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定义临时变量
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 循环查询,orgNo不为空,则循环
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查询结果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查询数据
		SELECT group_concat(p_org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回结果
	RETURN tmpOrg;
END $$

测试结果:

mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构

总结

到此这篇关于mysql查询上下级机构的文章就介绍到这了!

MySQL 相关文章推荐
MySQL复制问题的三个参数分析
Apr 07 MySQL
Mysql MVCC机制原理详解
Apr 20 MySQL
MySQL 角色(role)功能介绍
Apr 24 MySQL
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
MySQL 不等于的三种使用及区别
Jun 03 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
MySQL数据库之内置函数和自定义函数 function
Jun 16 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 #MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 #MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
MySQL去除密码登录告警的方法
Apr 20 #MySQL
MySQL数据库事务的四大特性
Windows 64位 安装 mysql 8.0.28 图文教程
分析MySQL优化 index merge 后引起的死锁
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python self用法详解
2020/11/28 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
药品质量检测应届生求职信
2013/11/14 职场文书
校长就职演讲稿
2014/01/06 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
学习三严三实心得体会
2014/10/13 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
浅谈golang 中time.After释放的问题
2021/05/05 Golang
如何正确理解python装饰器
2021/06/15 Python
详解nginx location指令
2022/01/18 Servers
Java 异步任务计算FutureTask
2022/04/28 Java/Android