mysql根据子节点查询父节点(mysql 递归查找菜单节点的所有子节点的方法)
类别:数据库 浏览量:1046
时间:2022-01-28 01:30:22 mysql根据子节点查询父节点
mysql 递归查找菜单节点的所有子节点的方法背景
项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随便添加存储过程,
因此在这里采用类似递归的方法对菜单的所有子节点进行查询。
准备
创建menu表:
|
CREATE TABLE `menu` ( `id` int (11) NOT NULL AUTO_INCREMENT COMMENT '菜单id' , `parent_id` int (11) DEFAULT NULL COMMENT '父节点id' , `menu_name` varchar (128) DEFAULT NULL COMMENT '菜单名称' , `menu_url` varchar (128) DEFAULT '' COMMENT '菜单路径' , `status` tinyint(3) DEFAULT '1' COMMENT '菜单状态 1-有效;0-无效' , PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12212 DEFAULT CHARSET=utf8; |
插入数据:
|
INSERT INTO `menu` VALUES ( '0' , null , '菜单0' , ' ' , '1' ); INSERT INTO `menu` VALUES ( '1' , '0' , '菜单1' , '' , '1' ); INSERT INTO `menu` VALUES ( '11' , '1' , '菜单11' , '' , '1' ); INSERT INTO `menu` VALUES ( '12' , '1' , '菜单12' , '' , '1' ); INSERT INTO `menu` VALUES ( '13' , '1' , '菜单13' , '' , '1' ); INSERT INTO `menu` VALUES ( '111' , '11' , '菜单111' , '' , '1' ); INSERT INTO `menu` VALUES ( '121' , '12' , '菜单121' , '' , '1' ); INSERT INTO `menu` VALUES ( '122' , '12' , '菜单122' , '' , '1' ); INSERT INTO `menu` VALUES ( '1221' , '122' , '菜单1221' , '' , '1' ); INSERT INTO `menu` VALUES ( '1222' , '122' , '菜单1222' , '' , '1' ); INSERT INTO `menu` VALUES ( '12211' , '1222' , '菜单12211' , '' , '1' ); |
得到的目录结构如下图所示:
查询
先贴出sql语句:
比如,要查询菜单节点12的所有子节点,则查处的结果为:
分析
首先分析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,按行依次执行,执行过程如下表所示:
这时,显示的id就是菜单id为12的所有子节点id
到此这篇关于mysql 递归查找菜单节点的所有子节点的文章就介绍到这了,更多相关mysql 递归查找菜单节点内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://www.cnblogs.com/rainydayfmb/p/8028868.html
您可能感兴趣
- mysql有数据但筛选值为空(解决从集合运算到mysql的not like找不出NULL的问题)
- mysql 如何选择隔离级别(全面解析MySQL中的隔离级别)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- 升级mysql客户端版本(超详细教你怎么升级Mysql的版本)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- mysql查询性能优化详解(实例讲解MySQL 慢查询)
- mysql分库分表视图(MySQL分库分表与分区的入门指南)
- mysql 主从配置详解(MySQL 8.0.15配置MGR单主多从的方法)
- 怎样查看mysql的安装路径(MySQL中查看数据库安装路径的方法)
- dockermysql配置详解(Docker 部署Mysql 服务和Redis 服务的方法)
- mysql8.0.25安装及配置超详细教程(MySQL8.0.21安装步骤及出现问题解决方案)
- mysql生成唯一订单号(MySQL高并发生成唯一订单号的方法实现)
- mysqlgroupby语句实现原理(Mysql中错误使用SQL语句Groupby被兼容的情况)
- mysql备份工具怎么选(MySQL使用Xtrabackup备份流程详解)
- php不能用mysql(php写入mysql中文乱码的实例解决方法)
- mysql常见的存储引擎(如何选择MySQL的存储引擎?)
- 郭麒麟(郭麒麟)
- 古人十句 戒骄 名言,醍醐灌顶,受益匪浅(古人十句戒骄名言)
- 《道德经》:功成不局,泰而不骄(道德经:功成不局)
- 每日一典 过江之鲫(每日一典过江之鲫)
- 红色代表什么(红色代表什么意义和象征)
- 菲律宾安全吗(菲律宾安全吗2023)
热门推荐
- thinkphp返回json(thinkphp5框架实现数据库读取的数据转换成json格式示例)
- 使用canvas的好坏(关于canvas绘制模糊问题的解决方法)
- vueassets文件路径(vue如何根据url下载非同源文件)
- python excel 合并表格(Python实现合并excel表格的方法分析)
- apache协议内容(Apache中rewrite伪静态规则介绍)
- lnmp怎么连接服务器(LNMP系列教程之 解决sendmail不能发送邮件问题)
- 有固定ip怎样设置云服务器(云服务器换ip难不难?云服务器换IP的步骤)
- vue滚动条滚动事件(vue实现一个滚动条样式)
- sqlserver配置管理器不见了(SQL Server配置管理器无法连接到WMI提供程序)
- 微信js开发教程(微信JSSDK分享功能图文实例详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9