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

2023-11-18

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 ischild
             from (
                  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:

	SELECT
		t1.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)下级组
SELECT
	id ,group_name
FROM
	(
	SELECT
		t1.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 
WHERE
	ischild != -1
	

结果

在这里插入图片描述

4.2 查询企业级角色组(id=2)下级组
SELECT
	id ,group_name
FROM
	(
	SELECT
		t1.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 
WHERE
	ischild != -1

结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件。问题

    我的 android studio 遇到了下一个问题 导致 org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveEx
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • 按对象值分组,统计后按最大对象属性设置组键

    我设法使用 Java 8 Streams API 编写了一个解决方案 该解决方案首先按对象 Route 的值对列表进行分组 然后计算每组中的对象数量 它返回一个映射 Route gt Long 这是代码 Map
  • 如何更改Mysql的连接排序规则

    如何更改 mysql 数据库的连接排序规则 我在 ubuntu 14 中使用 Mysql workbench 5 5 和 mysql 5 5 当我执行存储过程时 出现错误 错误代码 1267 操作 的排序规则 utf8 general ci
  • (Java) 在 Mac OS X 上以编程方式访问“系统根目录”下的 SSL 证书

    我正在编写一个 Java 应用程序 它可以通过远程 Https 站点进行 REST Api 调用 远程站点由受信任的证书签名 它在 Windows 上运行良好 但由于 SSL 证书问题 在 OS X 上运行时遇到问题 我做了一些挖掘 发现原
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • 从 org.w3c.dom.Node 获取 Xpath

    我可以从 org w3c dom Node 获取完整的 xpath 吗 假设当前节点指向 xml 文档中间的某个位置 我想提取该元素的 xpath 我正在寻找的输出 xpath 是 parent child1 chiild2 child3
  • 如何连接hibernate和DB2

    我正在运行一个使用 struts 和 hibernate 的应用程序 我目前正在使用 Derby 数据库 现在我必须转向 DB2 数据库 请告诉我 我必须做什么配置 休眠配置文件 我必须设置任何类路径吗 多变的 我知道 DB2 有两个 ja
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • Spring @Value 添加验证小于

    我使用以下属性值注入 我如何向此操作添加小于验证 我的意思是我想设置一个验证user maxpassiveday可以说 财产价值不得低于 100 Value user maxpassiveday int maxpassiveday 使用Sp
  • 将传入字符串的 unicode 表示形式转换为 UTF-8?

    我正在读取一些已经转换为 html 样式 代码的数据 我现在需要将其转换回 UTF 8 字符以供查看 不幸的是我无法使用浏览器查看该字符串 我读过有关 java 中的转换的内容 似乎如果你有一个 uxxxx 字符串 那么编译器会为你转换 然
  • 使用python中的mysql连接器正确从mysql数据库获取blob

    当执行以下代码时 import mysql connector connection mysql connector connect connection params here cursor connection cursor curso
  • 如何将mysql数据库移动到另一个安装点

    我有一个 MySQL 数据库 它变得越来越大 我想将整个数据库移动到另一个安装点 在那里我有足够的存储空间 我希望传输当前数据 并将新数据保存到新位置 软件堆栈 在 FreeBSD 6 上运行的 MySQL 5 当然其他答案也是有效的 但如
  • MYSQL数据库删除行后需要进行后期优化

    我有一个当前为 10GB 的日志表 它有很多过去两年的数据 我真的觉得目前我不需要那么多 我是否错误地认为在表中保存多年的数据不好 表越小越好 我的桌子都有 MYISAM 引擎 我想删除 2014 年和 2015 年的所有数据 很快我就会删
  • 如何在Webview中保存用户名和密码

    目前 我还在学习Android开发的过程中 所以如果我的这个问题对你来说不太容易理解 请原谅 我创建了一个 Android 应用程序 它使用 RecyclerView 显示一组列表 当用户单击列表中的每个名称时 它会将它们重定向到一组不同的
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • PHP strtotime返回Mysql UNIX_TIMESTAMP的不同值

    我在 stackoverflow 上搜索过帖子 发现了一些类似的帖子 但我认为这是一篇不同的帖子 我的 PHP 和 Mysql 服务器的时区全部设置为 UTC 在表中我使用时间戳字段 值为 2010 11 08 02 54 15 我使用这样
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有

随机推荐

  • Failed to execute ‘drawImage‘ on ‘CanvasRenderingContext2D‘: The image argument is a canvas element

    Echarts重绘报错 原因在于绘制时 未正确获取到画布的宽高 可在容器内写入行内样式 即可解决
  • 《Windows驱动开发技术详解》之读写操作

    缓冲区方式读写操作 设置缓冲区读写方式 读写操作一般是由ReadFile和WriteFile函数引起的 这里先以WriteFile函数为例进行介绍 WriteFile要求用户提供一段缓冲区 并且说明缓冲区的大小 然后WriteFile将这段
  • 前端将下载的文件压缩为zip文件

    本来的话这个前端下载文件是要从后端的接口获取二进制流数据 再进行操作的 但是懒得自己写接口返回二进制流数据 就用了比较偷懒的方法来模拟这个二进制流数据 直接用原生的input就可以 类型选择为file 然后点击这个input 就可以拿到fi
  • 河北专接本微机原理错题整理及资料分享

    菜鸡经验分享 ps 我是边上班边接本总分352 专业课发挥失误 哎 专业微机原理没技巧就是背 多背多刷题 资料中的15套题多刷几遍 视频看b站鸡哥的就行 数学98 哪年考的都不难题型都差不多 资料中的卷子多刷刷就行 刷的时候必须满分 英语2
  • MYSQL的索引使用注意

    索引并不是时时都会生效的 比如以下几种情况 将导致索引失效 最左前缀法则 如果使用了联合索引 要遵守最左前缀法则 最左前缀法则指的是查询从索引的最左列开始 并且不跳过索引中的列 如果跳跃某一列 索引将会部分失效 后面的字段索引失效 查看tb
  • 牛客网华为OD前端岗位,面试题库练习记录02

    题目一 删除字符串中出现次数最少的字符 HJ23 JavaScript Node ACM 模式 const rl require readline createInterface input process stdin var iter r
  • php简单的网站CRUD功能

    编辑器 使用的phpstrom 环境使用的 xampp 前段掌握并不熟练 引用了jQuery和bootstrap 目录 主页 数据库连接conn php home html 登录处理模块login php 登陆后可进入页面index php
  • 桥接模式下的虚拟机中ping不通网关

    桥接的虚拟机ping不通网关 配置VM 工具栏中的 编辑 gt 虚拟网络编辑器 点击添加网络 再选择桥接模式 2 打开虚拟机设置 网络适配器选择桥接模式 4 进入虚拟机 进入网络配置 5 将宿机的IP 掩码 网关等信息配置 注意 此时选择
  • angular新建组件的组成部分

    主要分为三个组成部分 一 一个ts文件 用来处理数据和功能的 初始会有一个inport 和一个 component 二 一个html文件 用来书写页面的内容 初始会有一个标签 三 一个css文件 用来书写页面样式 初始是一个空文件夹 转载于
  • redis 主从哨兵模式搭建

    一 REDIS主从模式 搭建三个节点 同一个机器 三个端口 安装包 wget http download redis io releases redis 5 0 7 tar gz 安装步骤 https blog csdn net whg18
  • 【Linux】Linux和Window下\r与\n的区别、git命令行的使用

    作者 小卢 专栏 Linux Git 喜欢的话 世间因为少年的挺身而出 而更加瑰丽 人民日报 目录 1 回车换行符在Window下和在Linux下的区别 1 1回车换行符 1 2 行缓冲区打印 1 3进度条小程序 2 git命令行的使用 2
  • JAVA SM2 数字证书生成

    文章目录 Before Start Build with Maven QuickStart 生成自签名公私钥对 证书签名算法算法提供者 设置证书信息 标识信息构造 DN 获取扩展密钥用途构造 可选 证书信息构造 X 509格式证书对象生成
  • C语言版通讯录——动态存储(进阶版)

    前言 之前 我出了一期关于通讯录管理系统的项目实现 里面可以实现通讯录人员的增添改查显示以及排序统计功能 但那种只是以静态开辟内存的方式进行编写 大小固定死 若是达到上限便不可以再进行添加 这次优化 我会将静态存储改为动态存储 达到可以永久
  • idea双击启动无效,idea卡顿问题

    idea双击启动无效 大概率是关机时没有正确关闭idea 再次开机导致无法正常启动idea 1 通过任务管理器杀死idea进程后重启idea 2 需要修改配置 打开 以各自电脑实际为准 C Program Files JetBrains I
  • OpenResty简介、编译安装、新增 sticky模块(再编译)、升级

    OpenResty 也被称为 ngx openresty 是一个基于 Nginx 与 Lua 的高性能 Web 平台 其内部集成了大量精良的 Lua 库 第三方的Nginx模块和大部分系统依赖包 用于方便地搭建能够处理超高并发 扩展性极高的
  • 找不到boost/noncopyable.hpp问题

    本人在vs2013使用boost库的时候 提示找不到boost noncopyable hpp文件 在百度和贴吧上找了很多资料 安装没出问题 只是在包含include的路径是为D boost 1 56 0 boost 本人将boost库直接
  • c++ 友元

    c 类中可以用friend关键字来声明友元 友元可以是另一个类或者类外的其他函数 友元只具有单向性例如 在类A中将类B声明为友元B可以查看A中的所有成员 而A不能查看B的私有成员 同理将一个函数声明为友元时这个函数也可以访问类中的所有成员
  • 6、微信小程序的布局

    文章目录 前言 一 传统基本布局 1 盒子模型 2 显示方式Display 3 定位position 4 溢出属性Overflow 5 浮动Float 6 对齐 二 Flex弹性布局 1 基本属性 2 使用示例 前言 wxss 指的是 We
  • (转)42个超实用的Google Chrome 插件,值得你拥有,建议收藏!

    每日英文 When friends ignore you don t be sad everyone has his own life who can not always be with you 当朋友忽略你时 不要伤心 每个人都有自己的
  • MySql语句查询某一级节点的所有子节点

    MySql语句查询某一级节点的所有子节点 在日常项目中 我们总能用到树型结构的数据 我们用代码去进行查询是比较麻烦的 这里提供一种sql语句查询父节点和子节点的方法 说明 只能当前节点查出所有子节点 不包含与当前节点平级的节点 且子节点是全