返回顶部
首页 > 资讯 > 数据库 >MySQL递归查找树形结构(这个方法太实用了!)
  • 272
分享到

MySQL递归查找树形结构(这个方法太实用了!)

2024-04-02 19:04:59 272人浏览 薄情痞子
摘要

目录1、数据库中的树形结构2、Mysql中如何查找相应的数据3、准备工作4.具体的实现(由浅入深)总结这两天,遇到了重要节点的需求。这里简单做个总结。 1、数据库中的树形结构 数据库中存贮的数据,以ID和P_ID(父id

这两天,遇到了重要节点的需求。这里简单做个总结。

1、数据库中的树形结构

数据库中存贮的数据,以ID和P_ID(父id),来存贮树形结构

这样如果需要查找某个节点的子节点,就可以寻找P_ID。如果要查找所有子节点,就需要遍历所有的子节点的子节点。

如果要判断是否为同级的节点,就可以查找是否有相同的节点。

2、mysql中如何查找相应的数据

这里,我采用的是一个存储函数。在查询时可以直接使用。当然,为了以后查询方便,也可以在一个视图使用。

3、准备工作

数据库表,为了方便,只有三个字段,能够说明情况即可。

CREATE TABLE `city` (
`i_id`  int(11) NOT NULL AUTO_INCREMENT ,
`p_id`  int(11) NULL DEFAULT NULL ,
`c_name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`i_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=11
ROW_FORMAT=COMPACT;

随便插入几条数据

MySQL递归查找树形结构(这个方法太实用了!)

实现介绍两个关键的函数

group_concat(column_name): 多条记录合成一条记录

SELECT GROUP_CONCAT(i_id)
FROM city
WHERE p_id='2'

MySQL递归查找树形结构(这个方法太实用了!)

find_in_set(column_name, strlist)在多条记录中查询特定列

SELECT * FROM city
WHERE FIND_IN_SET(p_id,'1,4')

MySQL递归查找树形结构(这个方法太实用了!)

4.具体的实现(由浅入深)

1.只查具体一级下级

SELECT GROUP_CONCAT(i_id) AS ids
FROM city
WHERE p_id=1;

MySQL递归查找树形结构(这个方法太实用了!)

2.查询某一个节点的子节点

在存贮函数之前,要注意一点。虽然参数名是 param_i_id,但查询时 要让p_id=param_i_id

CREATE DEFINER = `root`@`localhost` FUNCTioN `getSubnodes`(param_i_id  int)
 RETURNS varchar(100)
BEGIN
 
#输入I_ID 输出此I_ID下的所有子节点(只有一级)
 
  DECLARE strSubIds VARCHAR(100);
  DECLARE strPid VARCHAR(100);
  SET strSubIds = '$';
  SET strPid =cast(param_i_id as CHAR);
  SELECT GROUP_CONCAT(i_id) INTO strSubIds FROM city WHERE p_id=strPid;
  RETURN strSubIds;
END;

这样,就可以在查询语句中使用

MySQL递归查找树形结构(这个方法太实用了!)

3.查询所有下级

查到了一级,只要循环查询到某一个节点(这个节点没有子节点),就结束

CREATE DEFINER = `root`@`localhost` FUNCTION `getAllSubNodes`(`param_i_id` int)
 RETURNS varchar(100)
BEGIN
 
DECLARE strAllSubIds VARCHAR(100);
DECLARE strTempPid VARCHAR(100);
 
#先得到第一级,也可以掉用getSubNodes(param_i_id);
 
# SELECT GROUP_CONCAT(i_id) INTO strAllSubIds FROM city WHERE p_id=param_i_id;
 SET strAllSubIds = getSubNodes(param_i_id);
SET strTempPid = strAllSubIds;
 
#根据 strTempPid 判断是否还有子节点
 
WHILE strTempPid is not null DO
SELECT group_concat(i_id) INTO strTempPid FROM city WHERE FIND_IN_SET(p_id,strTempPid)>0;
 
#需要对strTempPid判断,非空用 , 连接
 
IF (strTempPid is not NULL) THEN
SET strAllSubIds = concat(strAllSubIds,',',strTempPid);
 
END IF;
END WHILE;
RETURN strAllSubIds;
END;

MySQL递归查找树形结构(这个方法太实用了!)

总结

到此这篇关于Mysql递归查找树形结构的文章就介绍到这了,更多相关MySQL递归查找树形结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL递归查找树形结构(这个方法太实用了!)

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

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

猜你喜欢
  • MySQL递归查找树形结构(这个方法太实用了!)
    目录1、数据库中的树形结构2、mysql中如何查找相应的数据3、准备工作4.具体的实现(由浅入深)总结这两天,遇到了重要节点的需求。这里简单做个总结。 1、数据库中的树形结构 数据库中存贮的数据,以ID和P_ID(父id...
    99+
    2024-04-02
  • mysql递归查询树形结构怎么应用
    在MySQL中实现递归查询树形结构可以使用递归查询语句(Recursive Query Statement)或者使用存储过程来实现。...
    99+
    2023-10-25
    mysql
  • Mysql树形递归查询的实现方法
    前言 对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇...
    99+
    2024-04-02
  • sqlserver中怎么实现树形结构递归查询
    本篇文章为大家展示了sqlserver中怎么实现树形结构递归查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。公用表表达式(CTE),是一个在查询中定义的临时命名结...
    99+
    2024-04-02
  • Java 递归查询部门树形结构数据的实践
    说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1、数据库表:department 2、编写sql映射语句 &...
    99+
    2024-04-02
  • Java递归实现树形结构的方式有哪些
    这篇文章主要介绍“Java递归实现树形结构的方式有哪些”,在日常操作中,相信很多人在Java递归实现树形结构的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java递归实现树形结构的方式有哪些”的疑...
    99+
    2023-07-04
  • 怎么在Oracle中实现递归树形结构查询功能
    这篇文章给大家介绍怎么在Oracle中实现递归树形结构查询功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中...
    99+
    2024-04-02
  • Java8利用stream流实现递归遍历树形结构
    利用stream流实现递归遍历树形结构 1. 什么是树形结构 下面用一张图片说明: 在这张表中,每条数据分别有自己的id和parentId,这些数据通过父与子不断连接,形成了一个树结构。 2. 如何通过stream流处理树形结构 我们最终...
    99+
    2023-08-30
    java mysql
  • 详解Java递归实现树形结构的两种方式
    目录0、引言1、数据准备2、类型转化3、递归实现方法3.1、Java7及以下纯Java递归实现3.2、Java8及以上借助lamda表达式实现0、引言 在开发的过程中,很多业务场景需...
    99+
    2022-11-13
    Java递归实现树形结构 Java树形结构 Java递归
  • Java方法递归的形式和常见递归算法(方法递归结合File类查找文件)
    目录方法递归方法递归的形式递归常见的算法非规律递归案例方法递归 方法递归的形式 什么是方法递归 方法直接调用自己或者间接调用自己的形式称为方法递归( recursion)。 递归做为...
    99+
    2023-02-28
    Java方法递归 java递归算法 java File类查找文件
  • Java怎么用递归实现树形结构的工具类
    本文小编为大家详细介绍“Java怎么用递归实现树形结构的工具类”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么用递归实现树形结构的工具类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。需求描述有时候,我...
    99+
    2023-07-05
  • 使用Java将一个List运用递归转成树形结构案例
    在开发中,我们会遇到将不同组织架构合并成tree这种树状结构,那么如果做呢? 实际上,我们也可以理解为如何将拥有父子关系的list转成树形结构,而这其中主要的方法就是递归! 1、实体...
    99+
    2024-04-02
  • Mysql 实现向上递归查找父节点并返回树结构的示例代码
    通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构。如果只有叶子,剔除掉; 如果只有根,只显示一个秃顶的根 ;如果既有...
    99+
    2024-04-02
  • Mysql实现向上递归查找父节点并返回树结构的示例代码
    通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构。如果只有叶子,剔除掉; 如果...
    99+
    2024-04-02
  • MySQL查询树形结构数据的两种方法
    目录1. 递归查询2. 闭包表对于mysql查询树形结构,可以使用递归查询或者闭包表来实现。以下是两种常用的方法: 1. 递归查询 使用递归查询可以遍历树形结构,获取父节点和子节点的关系。假设有一个名为 your_tab...
    99+
    2023-11-11
    MySQL查询树形数据 MySQL查询树形结构 MySQL树形结构查询
  • 利用递归算法怎么将数据库解析成Java树形结构
    利用递归算法怎么将数据库解析成Java树形结构?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、准备表结构及对应的表数据a、表结构:create table T...
    99+
    2023-05-31
    java ava 递归算法
  • PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么
    这篇文章主要介绍“PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么”,在日常操作中,相信很多人在PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么问题上存在疑惑,...
    99+
    2023-06-21
  • MyBatis实现两种查询树形数据的方法详解(嵌套结果集和递归查询)
    目录方法一:使用嵌套结果集实现1,准备工作2,实现代码方法二:使用递归查询实现    树形结构数据在开发中十分常见,比如:菜单数、组织树, 利用&nbs...
    99+
    2024-04-02
  • 算法+数据结构=程序,今天就来说说递归+排序+查找,再加上树与图
    著名数据专家沃斯曾说:算法+数据结构=程序上次讲了数据结构这回就讲讲算法复杂度复杂度分析,是贯彻数据结构和算法中的一项基础技能,学习数据结构和算法的目的,无非就是要写出占用空间更小、运行时间更短的代码。时间复杂度大O表示法:T(n) = O...
    99+
    2023-06-04
  • MySql利用父id递归向下查询子节点的方法实例
    不用写存储过程,不用建数据库函数,一段sql就可以实现 不用写存储过程,不用建数据库函数,一段sql就可以实现 不用写存储过程,不用建数据库函数,一段sql就可以实现 SELEC&#...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作