返回顶部
首页 > 资讯 > 数据库 >【mysql 递归查找菜单节点的所有子节点】
  • 804
分享到

【mysql 递归查找菜单节点的所有子节点】

mysqlsql数据库 2023-09-09 13:09:09 804人浏览 薄情痞子
摘要

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');

得到的目录结构如下图所示:
在这里插入图片描述

查询

注意:

这里的ID是自增的,并且需要父级的ID比子级的ID小      

先贴出sql语句:

select id from (              select t1.id,              if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', id), 0) as ischild              from (                   select id,parent_id from re_menu t where t.status = 1 order by parent_id, id                  ) t1,                  (select @pids := 要查询的菜单节点 id) t2             ) t3 where ischild != 0

比如,要查询菜单节点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

参考链接:
https://www.cnblogs.com/rainydayfmb/p/8028868.html

来源地址:https://blog.csdn.net/jincheng_/article/details/129439151

您可能感兴趣的文档:

--结束END--

本文标题: 【mysql 递归查找菜单节点的所有子节点】

本文链接: https://lsjlt.com/news/401550.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【mysql 递归查找菜单节点的所有子节点】
    mysql 递归查找菜单节点的所有子节点 背景准备查询注意: 分析 背景 项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随...
    99+
    2023-09-09
    mysql sql 数据库
  • mysql 递归查找菜单节点的所有子节点的方法
    背景 项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随便添加存储过程, 因此在这里采用类似递归的方法对菜单的所有子节点进行查询。 准备 创建menu表: ...
    99+
    2022-05-15
    mysql 递归查找菜单节点 mysql 递归查找节点
  • java递归查询所有子节点怎么实现
    在Java中,可以使用递归来查询所有子节点。具体实现如下: 首先,创建一个树节点类,包含一个值和一个子节点列表: class Tre...
    99+
    2023-10-25
    java
  • oracle递归查询所有子节点怎么实现
    实现Oracle递归查询所有子节点可以通过使用CONNECT BY子句来实现。CONNECT BY子句用于在查询结果中递归地查找子节...
    99+
    2024-04-09
    oracle
  • 以mysql为例,通过sql查找所有父节点和所有子节点
    以图中的dept表为例: id:主键 parent_id:父id name:名称 1. 获取所有子节点sql: select id from dept where id = 2 union selec...
    99+
    2023-08-16
    mysql sql 父节点 子节点
  • java 树状数据,递归 从子节点找父节点
    前言:递归算法在项目中也会使用到,简单介绍一下在项目中使用到的场景 补充一个题目 递归方法实现三个要素: 明确递归终止条件; 给出递归终止时的处理办法; 提取重复的逻辑,缩小问题的规模。 场景一:根据树状图的某一节点,查找特定条件的上级节点...
    99+
    2023-08-20
    数据结构 算法
  • sql递归查询父子节点
    一、表结构 二、递归查询当前节点的所有父节点 select * from test start with id = 3 connect by prior pid = id 三、递归查询当前节点的所有子节点 sele...
    99+
    2014-07-18
    sql递归查询父子节点
  • java递归查找树的子节点怎么实现
    在Java中,使用递归实现查找树的子节点可以通过以下步骤完成: 定义树节点类,包含节点值和左右子节点引用。 class Tree...
    99+
    2023-10-25
    java
  • ORACLE数据库递归查询当前节点的父节点和子节点(tree)
    ORACLE 数据库递归查询当前数据的所有孩子数据(不包含自己)SELECT id   AS id,   parent_id&n...
    99+
    2024-04-02
  • SQL的递归查询子/父节点结构(MySQL)
    当数据库中存储了树型结构的数据,例如城市表时,我们要搜索一个城市的所有父级城市或所有的子级城市,首先想到的就是利用SQL的递归查询,来看下面的MySQL例子(下列例子MySQL只适用于8.0版本及以上): 下载SQL,执行 表结构和数据S...
    99+
    2023-08-17
    sql 数据库 mysql
  • SQL 中怎么利用双亲节点查找所有子节点
    这期内容当中小编将会给大家带来有关SQL 中怎么利用双亲节点查找所有子节点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建表如下CREATE TABLE&nb...
    99+
    2024-04-02
  • MySQL根据父节点id查询所有子节点信息
    SELECT * FROM ( SELECT t1.*, IF(FIND_IN_SET(pid, @pids) > 0, @pids := CONCAT(@pids, ',', id),...
    99+
    2023-09-08
    sql Powered by 金山文档
  • mysql递归子节点查询的方法是什么
    在MySQL中,递归子节点查询可以通过使用递归查询语句来实现。MySQL本身没有提供递归查询的功能,但可以通过使用存储过程或视图来模...
    99+
    2023-10-25
    mysql
  • php无限级分类查找所有子节点
    在PHP中,可以使用递归来查找无限级分类的所有子节点。下面是一个示例代码:```phpfunction findAllChildre...
    99+
    2023-10-11
    php
  • 使用递归怎么删除树形结构的所有子节点
    使用递归怎么删除树形结构的所有子节点?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.业务场景有如下树形结构: +—0 +—1 +—2 +—4 +—5 +—3如...
    99+
    2023-05-31
    递归
  • MySql如何利用父id递归向下查询子节点
    这篇文章主要介绍了MySql如何利用父id递归向下查询子节点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。不用写存储过程,不用建数据库函数,一段sql就可以实现SELEC&#...
    99+
    2023-06-29
  • MySql利用父id递归向下查询子节点的方法实例
    不用写存储过程,不用建数据库函数,一段sql就可以实现 不用写存储过程,不用建数据库函数,一段sql就可以实现 不用写存储过程,不用建数据库函数,一段sql就可以实现 SELEC&#...
    99+
    2024-04-02
  • mysql怎样查询子节点
    这篇文章将为大家详细讲解有关mysql怎样查询子节点,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql查询子节点的方法:首先创建menu表,并插入数据;然后使用语句...
    99+
    2024-04-02
  • 使用dom4j递归解析节点内还含有多个节点的xml
    目录dom4j递归解析节点内还含有多个节点的xml介绍了dom4j的一些平常使用下面是main方法以及两个解析方法dom4j递归解析XML字符串所有子节点dom4j递归解析节点内还含...
    99+
    2024-04-02
  • Oracle通过递归查询父子兄弟节点方法示例
    前言 说到Oracle中的递归查询语法,我觉得有一些数据库基础的童鞋应该都知道,做项目的时候应该也会用到,下面本文就来介绍下关于Oracle通过递归查询父子兄弟节点的相关内容,分享出来供大家参考学习,下面话...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作