目录

1.背景

2.思路

2.FIND_IN_SET的用法

3.查询所有子节点方法

4.查询所有父节点方法

5.查询组织树形结构数据


1.背景

在项目开发过程中经常需要用到人员树、组织树的展示,后端就需要组织树结构的原始数据,使用SQL语言在查询mysql数据库时候,以下结合开发经验如何查询某个组织相关的上级组织和下级组织,利用后端返回的数据结构来展示组织树形结构

2.思路

编写mysql方法用来寻找相关节点,其中一个方法queryDownChildren,是用来查询指定节点下的所有子节点,用逗号连接;另一个方法queryUpChildren,是用来查询指定节点的所有父节点,用逗号连接;然后借助mysql的方法FIND_IN_SET

2.FIND_IN_SET的用法

select * from t_uc_org where FIND_IN_SET(org_id, '1,2,3,4,5');
/*
使用find_in_set函数一次返回多条记录
org_id 是一个表的字段,然后每条记录分别是org_id等于1,2,3,4,5的时候,有点类似in (集合)的使用,如下所示:
*/
select * from t_uc_org where org_id in (1,2,3,4,5);

3.查询所有子节点方法

CREATE FUNCTION queryDownChildren(rootId varchar(100))
RETURNS VARCHAR(1000)
BEGIN
DECLARE sTemp varchar(16300);DECLARE sTempChd varchar(16300);SET sTemp = '$';SET sTempChd =CAST(rootId AS CHAR);WHILE sTempChd IS NOT NULL DOSET sTemp = CONCAT(sTemp,',',sTempChd);SELECT GROUP_CONCAT(ORG_ID) INTO sTempChd FROM t_uc_org WHERE org_type=unionType  and FIND_IN_SET(ORG_PARENT_ID,sTempChd)>0;END WHILE;
RETURN sTemp;
END

4.查询所有父节点方法

CREATE FUNCTION queryUpChildren(rootId varchar(100))
RETURNS VARCHAR(1000)
BEGIN
DECLARE sTemp VARCHAR(16283);DECLARE sTempChd VARCHAR(16283);SET sTemp = '$';SET sTempChd =CAST(rootId AS CHAR);WHILE sTempChd IS NOT NULL DOSET sTemp = CONCAT(sTemp,',',sTempChd);SELECT GROUP_CONCAT(ORG_PARENT_ID) INTO sTempChd FROM t_uc_org WHERE FIND_IN_SET(ORG_ID,sTempChd)>0;END WHILE;
RETURN sTemp;
END

说明:其中表t_uc_org是组织表,里面涉及组织的上下级关系 ORG_PARENT_ID是父级组织,ORG_ID是组织本身的ID

5.查询组织树形结构数据

查询某个组织的上下级组织关系数据(包含本身、上级组织和下级组织)

select * from t_uc_org t where FIND_IN_SET(t.ORG_ID, concat(queryUpChildren('1'),queryDownChildren('1'))) ;

其中字符1是某个组织的主键ID值

写到这里后端的原始数据已经准备好了,可以通过拼装json结构,以Resetful api接口方式就可以提供给前端调用了。

Mysql树结构查询思路相关推荐

  1. mysql多线程查询_MySQL 利用多线程提升查询性能的一种思路

    转载自:http://dinglin.iteye.com/blog/1432443 背景 报表统计类的查询是一类耗时的查询.使用场景是QPS并不大,单每个查询由于需要访问较多数据,对大量数据做处理,执 ...

  2. 12个MySQL慢查询的原因分析

    1. SQL 没加索引 很多时候,我们的慢查询,都是因为没有加索引.如果没有加索引的话,会导致全表扫描的.因此,应考虑在 where 的条件列,建立索引,尽量避免全表扫描. 反例: select * ...

  3. 浅谈 MySQL 子查询及其优化

    2019独角兽企业重金招聘Python工程师标准>>> 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动 ...

  4. 说说 MySQL 子查询

    前言 前两天开发找DBA解决一个含有子查询的慢sql,我们通过将其修改为关联查询和添加索引解决.考虑到 大多数开发并没有准确的理解 MySQL 的子查询执行原理.本文介绍如何解决子查询慢查的思路. 原 ...

  5. mysql的查询、子查询及连接查询

    一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)  1.where常用运算符: 比较运算符 &g ...

  6. mysql 执行计划不对_关于mysql主从查询执行计划不一致问题的分析

    最近面试过程中被面试官抛了一个问题,说曾经有一个线上出现的奇怪的问题,主库和从库各种配置是一致的,当数据量比较大的时候,某些时候同样的查询,在从库里的执行计划执行成功了,而主库里没有执行这个执行计划, ...

  7. mysql 子查询 as_mysql子查询

    更多关于LeetCode习题总结请翻阅我的博客: LeetCode - mysql子查询[184. 部门工资最高的员工] 子查询 一.按查询结果分类: 1.作为数据源使用: 2.作为选择条件使用: 二 ...

  8. mysql分页查询关键_MySQL优化教程之超大分页查询

    背景 基本上只要是做后台开发,都会接触到分页这个需求或者功能吧.基本上大家都是会用MySQL的LIMIT来处理,而且我现在负责的项目也是这样写的.但是一旦数据量起来了,其实LIMIT的效率会极其的低, ...

  9. MySQL高级 —— 查询性能优化

    引言 承接<MySQL高级 -- 高性能索引>,本篇博客将围绕<高性能MySQL(第三版)>第六章内容进行总结和概括. 与索引的部分一样,SQL优化也是广大程序员深入MySQL ...

最新文章

  1. 3.1.5 改善模型的表现
  2. 时隔 17 年,美科技股终于“收复失地”,但这次不是泡沫了
  3. 【easysnmp】python snmp IF-MIB::ifPhysAddress messy code,解析mac地址乱码
  4. 改变进程的优先级,nice,getpriority,setpriority
  5. java 终结此段代码并重新运行_Java垃圾回收
  6. 修改value_EXCEL批量名称修改
  7. iOS tableview嵌套collectionview
  8. java json clone_再谈java clone 以及 浅/深拷贝
  9. Hive 与 RDBMS的区别
  10. 51nod-1358:浮波那契
  11. c语言指针++_C和C ++中的指针
  12. 图解win7中IIS7.0的安装及配置ASP环境
  13. 打包,VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
  14. a blog about grid stytem
  15. mysql5.095下载_战舰世界095版本
  16. 创业公司股权架构搭建原则
  17. 学编程难吗?多久能入门?
  18. python求1到100偶数和_python 求1-100之间的奇数或者偶数之和的实例
  19. 关于物联网你需要知道的一切
  20. 小米路由修改服务器密码,小米路由器3G密码怎么重置? 小米3G路由器修改wifi密码的方法...

热门文章

  1. 留学生论文辅导一般多少钱?
  2. html单词和单词之间的距离,如何给HTML页面的文本设置字符和单词间距
  3. Zabbix 5.0实战应用及企业案例
  4. 1.8tft彩屏测试代码(stm32f407ve)
  5. 东南计算机研究生英语免修条件,关于2020级研究生(硕士、博士)办理学位英语免修的通知...
  6. 可行性研究--《软件工程导论》
  7. css实现方块滚动loading进度条(令人舒服)
  8. bootstrap字体无法引入
  9. Python实现的综艺大数据分析系统
  10. Python版 IMEI 验证