MySql语句查询某一级节点的所有子节点

​ 在日常项目中,我们总能用到树型结构的数据,我们用代码去进行查询是比较麻烦的,这里提供一种sql语句查询父节点和子节点的方法。

说明:只能当前节点查出所有子节点,不包含与当前节点平级的节点,且子节点是全部返回,并没有分层分级。

1、表结构----建表语句

CREATE TABLE `group` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`parent_id` bigint(20) NOT NULL,   `subsystem_id` int(11) NOT NULL,`group_name` varchar(60) NOT NULL,`create_time` datetime NOT NULL,`description` varchar(256) DEFAULT NULL,`available` bit(1) NOT NULL DEFAULT b'1' COMMENT '0::false,1:true',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='组';

2、表结构----数据

数据说明

​ 举例:

​ 平台级角色组的id为1,那他的子节点包含2,4,3

​ 企业域级角色组id为2,那他的子节点包含3

3、SQL语句模板

select id from (select t1.id,if(find_in_set(父级id字段名, @pids) > 0, @pids := concat(@pids, ',', 主键id字段名), -1) as ischildfrom (select 主键id字段名,父级id字段名 from 表名 t  order by 父级id字段名, 主键id字段名) t1,(select @pids := 需要查询的主键id) t2) t3 where ischild != -1

语句说明

​ 首先分析from后面的语句,根据parent_id和id 排序,并将要查询的菜单节点当做变量,from后面的结果为

​ 接下来看if(express1,express2,express3)条件语句,if语句类似三目运算符,当exprss1成立时,执行express2,否则执行express3;

​ FIND_IN_SET(str,strlist),str 要查询的字符串,strlist 字段名 参数以”,”分隔 如 (1,2,6,8),查询字段(strlist)中包含(str)的结果,返回结果为null或记录

​ 如果parent_id 在@pid中,则将@pid 里面再加上parent_id,按行依次执行

​ 此时执行的sql:

    SELECTt1.id,t1.group_name,IF( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), -1 ) AS ischild FROM( SELECT id, parent_id,group_name FROM `group` t ORDER BY parent_id, id ) t1,( SELECT @pids := 1 ) t2

执行过程如下表所示:

4、查询举例

4.1 查询平台级角色组(id=1)下级组
SELECTid ,group_name
FROM(SELECTt1.id,t1.group_name,IF( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), -1 ) AS ischild FROM( SELECT id, parent_id,group_name FROM `group` t ORDER BY parent_id, id ) t1,( SELECT @pids := 1 ) t2 ) t3
WHEREischild != -1

结果

4.2 查询企业级角色组(id=2)下级组
SELECTid ,group_name
FROM(SELECTt1.id,t1.group_name,IF( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), -1 ) AS ischild FROM( SELECT id, parent_id,group_name FROM `group` t ORDER BY parent_id, id ) t1,( SELECT @pids := 2 ) t2 ) t3
WHEREischild != -1

结果

MySql语句查询某一级节点的所有子节点相关推荐

  1. 一条mysql语句查询出男女的人数

    统计报表中,为了实现一条mysql语句查询出男女的人数,sql语句如下: #年末年龄统计表 select COUNT(case when info.sex = 'm' then sex end ) a ...

  2. mysql语句查询慢造成mysql卡死_MySQL数据库之一次MySQL慢查询导致的故障

    本文主要向大家介绍了MySQL数据库之一次MySQL慢查询导致的故障 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 我们知道分析MySQL语句查询性能的方法除了使用EXPLAI ...

  3. mysql查询某节点的所有子节点

    mysql查询某节点的所有子节点,支持无限级 SELECTid ,parent_id,name FROM(SELECTt1.id,t1.name,t1.parent_id,IF( find_in_se ...

  4. mysql查找无根节点sql_SQL 双亲节点查找所有子节点的实现方法

    怎么保存树状结构的数据呢?在 SQL 中常用的是双亲节点法.创建表如下 CREATE TABLE category ( id LONG, parentId LONG, name String(20) ...

  5. mysql根据父节点递归查询所有子节点

    mysql根据父节点递归查询所有子节点 在开发中,我们经常遇到通过父级节点查询所有子节点的需求,我们知道在mysql中我们可以自定义函数的方式来实现这个功能,但是自定义函数根据父节点递归查询所有子节点 ...

  6. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)

    前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...

  7. mysql获取当前节点的所有叶子节点_mssql sqlserver 如何获取一个叶子节点下所有子节点呢?...

    摘要: 下文sql技巧-获取所有子节点的方法分享,如下所示: 实现思路: 通过while循环依次遍历节点,然后将起添加到临时表中返回 即可通过节点获取所有子节点 例: create table [ma ...

  8. vue实现echarts树图修改节点图片,修改连线颜色,鼠标悬停显示详情,鼠标右键弹出菜单,搜索,导出PNG,高亮,查看节点是否还有子节点,修改树图的展示方式

    其实这些效果之前都有用js写过,但是最近在写vue项目,里面的些许语法还是有些不一样的,所以还是写一遍文章总结一下,下次遇到就可以直接用了. 如果想看js写法,可以看我别的文章 首先,实现效果入下图: ...

  9. 递归删除父节点及所有子节点(转)

    --递归删除父节点及所有子节点create table tb(Id int, ParentId int, Name varchar(5))insert into tb select 1, 0, 'a1 ...

最新文章

  1. matplotlib绘制3维图
  2. css怎么给字体夹阴影,css怎么给字体加阴影效果
  3. Node.js 常用Mongoose方法
  4. codeforces 158A-C语言解题报告
  5. java堆内存 数据结构_JAVA内存区域
  6. redis 系列17 持久化 AOF
  7. [论文翻译] Estimation of Image Rotation Angle Using Interpolation-Related Spectral Signatures
  8. java wsdl反向生成源码,并使用CXF实现客户端调用代码
  9. Android设备的ID
  10. 找不到该项目,请确认该项目的位置的办法(转)
  11. unity打开htc vive 的前置摄像头 和 实现增强现实效果
  12. CSS font-family 各字体一览表
  13. 一文搞懂如何使用STM32驱动直流电机(普通PWM输出和L298N、高级定时器输出带死区双通道互补PWM和IR2110S及自举电路、H桥电路和电机正反转)
  14. 51单片机入门教程(4)——波形发生器
  15. 语速对科大讯飞,百度,思必驰,云知声的语音引擎识别结果影响对比
  16. 基于linux cli( 命令行) 的翻译工具推荐
  17. 京交会将首设“一主多辅”场馆 展览面积较往届倍增
  18. RAM和ROM存储空间的混合
  19. 【工作笔记】004 tapestry框架
  20. 第一章 Python初探

热门文章

  1. 转:090801对《奋斗》的评论
  2. 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...
  3. 明天去看世博会,今天找点信息做点功课!(内容转载自百度知道)
  4. 方法的调用(java)
  5. Python入门基础知识(turtle库)
  6. 设置div标签可以输入文字
  7. [工具书]浏览器按F12控制台使用手册
  8. 计算机网络 套接字编程:生成网络应用
  9. EQ控制卡二次开发(火凤凰、蓝精灵异步单双色控制卡卡)
  10. JS 基础面试题 2019年最新前端面试题目