MySql语句查询某一级节点的所有子节点
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语句查询某一级节点的所有子节点相关推荐
- 一条mysql语句查询出男女的人数
统计报表中,为了实现一条mysql语句查询出男女的人数,sql语句如下: #年末年龄统计表 select COUNT(case when info.sex = 'm' then sex end ) a ...
- mysql语句查询慢造成mysql卡死_MySQL数据库之一次MySQL慢查询导致的故障
本文主要向大家介绍了MySQL数据库之一次MySQL慢查询导致的故障 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 我们知道分析MySQL语句查询性能的方法除了使用EXPLAI ...
- mysql查询某节点的所有子节点
mysql查询某节点的所有子节点,支持无限级 SELECTid ,parent_id,name FROM(SELECTt1.id,t1.name,t1.parent_id,IF( find_in_se ...
- mysql查找无根节点sql_SQL 双亲节点查找所有子节点的实现方法
怎么保存树状结构的数据呢?在 SQL 中常用的是双亲节点法.创建表如下 CREATE TABLE category ( id LONG, parentId LONG, name String(20) ...
- mysql根据父节点递归查询所有子节点
mysql根据父节点递归查询所有子节点 在开发中,我们经常遇到通过父级节点查询所有子节点的需求,我们知道在mysql中我们可以自定义函数的方式来实现这个功能,但是自定义函数根据父节点递归查询所有子节点 ...
- Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)
前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...
- mysql获取当前节点的所有叶子节点_mssql sqlserver 如何获取一个叶子节点下所有子节点呢?...
摘要: 下文sql技巧-获取所有子节点的方法分享,如下所示: 实现思路: 通过while循环依次遍历节点,然后将起添加到临时表中返回 即可通过节点获取所有子节点 例: create table [ma ...
- vue实现echarts树图修改节点图片,修改连线颜色,鼠标悬停显示详情,鼠标右键弹出菜单,搜索,导出PNG,高亮,查看节点是否还有子节点,修改树图的展示方式
其实这些效果之前都有用js写过,但是最近在写vue项目,里面的些许语法还是有些不一样的,所以还是写一遍文章总结一下,下次遇到就可以直接用了. 如果想看js写法,可以看我别的文章 首先,实现效果入下图: ...
- 递归删除父节点及所有子节点(转)
--递归删除父节点及所有子节点create table tb(Id int, ParentId int, Name varchar(5))insert into tb select 1, 0, 'a1 ...
最新文章
- matplotlib绘制3维图
- css怎么给字体夹阴影,css怎么给字体加阴影效果
- Node.js 常用Mongoose方法
- codeforces 158A-C语言解题报告
- java堆内存 数据结构_JAVA内存区域
- redis 系列17 持久化 AOF
- [论文翻译] Estimation of Image Rotation Angle Using Interpolation-Related Spectral Signatures
- java wsdl反向生成源码,并使用CXF实现客户端调用代码
- Android设备的ID
- 找不到该项目,请确认该项目的位置的办法(转)
- unity打开htc vive 的前置摄像头 和 实现增强现实效果
- CSS font-family 各字体一览表
- 一文搞懂如何使用STM32驱动直流电机(普通PWM输出和L298N、高级定时器输出带死区双通道互补PWM和IR2110S及自举电路、H桥电路和电机正反转)
- 51单片机入门教程(4)——波形发生器
- 语速对科大讯飞,百度,思必驰,云知声的语音引擎识别结果影响对比
- 基于linux cli( 命令行) 的翻译工具推荐
- 京交会将首设“一主多辅”场馆 展览面积较往届倍增
- RAM和ROM存储空间的混合
- 【工作笔记】004 tapestry框架
- 第一章 Python初探
热门文章
- 转:090801对《奋斗》的评论
- 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...
- 明天去看世博会,今天找点信息做点功课!(内容转载自百度知道)
- 方法的调用(java)
- Python入门基础知识(turtle库)
- 设置div标签可以输入文字
- [工具书]浏览器按F12控制台使用手册
- 计算机网络 套接字编程:生成网络应用
- EQ控制卡二次开发(火凤凰、蓝精灵异步单双色控制卡卡)
- JS 基础面试题 2019年最新前端面试题目