MYSQL 取树型数据

MySQL 实现查询树形结构下的所有子节点的方法 在 MySQL 中,我们可以使用递归查询的方法来获取给定节点下的所有子节点。现在,让我们开始编写查询给定节点下的所有子节点的递归查询语句。我们将使用 MySQL 的递归查询功能,基于每个节点的父节点递归查找其子节点。执行以上的查询语句后,将返回给定节点下的所有子节点的信息,包括它们的 ID、名称和父节点的 ID。首先,我们需要创建一个示例数据表来存储树形结构的数据。表,通过匹配父节点和子节点的关系,逐步获取所有子节点的信息。替换为实际的节点 ID 值,以获取特定节点下的所有子节点。[给定节点的 ID] 阅读详情

获取一个节点的所有子孙节点群

通过一个根节点获取其下所有子孙节点列表


创建操作对象——数据表和数据

CREATE TABLE Region
(
Id INT NOT NULL AUTO_INCREMENT COMMENT 'ID',
NAME NVARCHAR(20),
ParentId INT,
PRIMARY KEY (`Id`)
)

INSERT INTO Region(NAME,ParentId) VALUES('广东',NULL);
INSERT INTO Region(NAME,ParentId) VALUES('深圳',1);
INSERT INTO Region(NAME,ParentId) VALUES('惠州',1);
INSERT INTO Region(NAME,ParentId) VALUES('罗湖区',2);
INSERT INTO Region(NAME,ParentId) VALUES('福田区',2);
INSERT INTO Region(NAME,ParentId) VALUES('龙岗区',2);
INSERT INTO Region(NAME,ParentId) VALUES('惠阳区',3);
INSERT INTO Region(NAME,ParentId) VALUES('龙门县',3);
INSERT INTO Region(NAME,ParentId) VALUES('华强北',5);
INSERT INTO Region(NAME,ParentId) VALUES('体育馆',5);

SELECT * FROM Region;

  1. 函数法——广度遍历
循环遍历,借助MYSQL内的几个函数对字符串处理:group_concat(); find_in_set(); concat()

// 创建函数

DELIMITER $$
USE `ebt_shop`$$
DROP FUNCTION IF EXISTS `getChildList`$$

CREATE DEFINER=`csst`@`%` FUNCTION `getChildList`(rootId INT) RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
      DECLARE sChildList VARCHAR(1000);
      DECLARE sChildTemp VARCHAR(1000);
      SET sChildTemp =CAST(rootId AS CHAR);

      WHILE sChildTemp IS NOT NULL DO
        IF (sChildList IS NOT NULL) THEN
          SET sChildList = CONCAT(sChildList,',',sChildTemp);
       ELSE
          SET sChildList = CONCAT(sChildTemp);
       END IF;
        SELECT GROUP_CONCAT(id) INTO sChildTemp FROM region WHERE FIND_IN_SET(parentId,sChildTemp)>0;
      END WHILE;

      RETURN sChildList;
  END$$

DELIMITER ;

【说明】
优点: 简单,方便,没有递归调用层次深度的限制 (max_sp_recursion_depth,最大255) ;
缺点:长度受限,虽然可以扩大 RETURNS varchar(1000),但总是有最大限制的。


2.存过,递归——深度遍历

借助临时表和游标遍历,递归的存储过程。

存过A:

DELIMITER $$
USE `ebt_shop`$$
DROP PROCEDURE IF EXISTS `showChildLst`$$
CREATE DEFINER=`csst`@`%` PROCEDURE `showChildLst`(IN rootId INT)
BEGIN
  /* create temporary table */
  CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst  
  (      sno INT PRIMARY KEY AUTO_INCREMENT,
 id INT,
 depth INT
   );
  /* delete data for temporary table */
  DELETE FROM tmpLst;

  /* main process: call recursive procedure */
  CALL createChildLst(rootId,0);

  /* show result */
  SELECT tmpLst.*,region.* FROM tmpLst,region WHERE tmpLst.id=region.id ORDER BY tmpLst.sno;

  /* drop temporary table */
  DROP TEMPORARY TABLE IF EXISTS tmpLst;
END$$
DELIMITER ;

存过B:

DELIMITER $$
USE `ebt_shop`$$
DROP PROCEDURE IF EXISTS `createChildLst`$$
CREATE DEFINER=`csst`@`%` PROCEDURE `createChildLst`(IN rootId INT,IN nDepth INT)
BEGIN
  DECLARE done INT DEFAULT 0;   /* 控制while循环变量 */
  DECLARE tempId INT;           /* 游标中循环时赋值变量 */

  /* 定义游标cur1 */
  DECLARE cur1 CURSOR FOR SELECT id FROM region WHERE ParentId=rootId;  
  /* 当前节点没有子节点时,设置while循环变量为退出值 */  
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

  /* 插入当前节点记录 */
  INSERT INTO tmpLst VALUES (NULL,rootId,nDepth);  

  /* 迭代游标;在while循环中做递归 */
  OPEN cur1;
    FETCH cur1 INTO tempId;

    WHILE done=0 DO
      CALL createChildLst(tempId, nDepth+1);
      FETCH cur1 INTO tempId;
    END WHILE;

  CLOSE cur1;

END$$
DELIMITER ;

【说明】:MySQL中你可以利用系统参数 max_sp_recursion_depth 来控制递归调用的层数上限。如下例设为12.

    SET max_sp_recursion_depth=12;

优点 : 可以更灵活处理,及层数的显示。并且可以按照树的遍历顺序得到结果。
缺点 : 递归有255的限制。


3.存过,借助额外的表——深度遍历

由于MySQL中不允许在同一语句中对临时表多次引用, 因此用普通表来存储。 当然你的程序中负责在用完后清除这个表。
DELIMITER $$

USE `ebt_shop`$$
DROP PROCEDURE IF EXISTS `showTreeNodesByAssitantTbl`$$

CREATE DEFINER=`csst`@`%` PROCEDURE `showTreeNodesByAssitantTbl`(IN rootId INT)
BEGIN
 /* 创建表 */
  DROP TABLE IF EXISTS tmpLst;
  CREATE TABLE tmpLst (
    id INT,
    nLevel INT,
    sCort VARCHAR(8000)
  );

  DECLARE LEVEL INT ;
  SET LEVEL=0 ;
  INSERT INTO tmpLst SELECT id,LEVEL,ID FROM region WHERE ParentId=rootId;   /* insert into ... select 语句 */
  WHILE ROW_COUNT()>0 DO
       SET LEVEL=LEVEL+1 ;
       INSERT INTO tmpLst 
          SELECT A.id, LEVEL, CONCAT(B.sCort, A.id) FROM region A,tmpLst B 
               WHERE  A.ParentId=B.id AND B.nLevel=LEVEL-1  ;
  END WHILE;

END$$

DELIMITER ;
/* 调用存过会创建表,然后查询展示 */
CALL showTreeNodesByAssitantTbl(1);

SELECT CONCAT(SPACE(B.nLevel*2),'+--',A.name) FROM region A,tmpLst B WHERE A.ID=B.ID ORDER BY B.sCort;

【说明】
优点 : 层数的显示。并且可以按照树的遍历顺序得到结果。没有递归限制。
缺点 : MySQL中对临时表的限制,只能使用普通表,需做事后清理。


结构方程模型amos的操作与应用pdf_AMOS结构方程进行医学问卷量表分析教程(一阶简单路径效应分析)... 在生物医药的数据统计分析中,要研究量表和量表之间的关系时候,由于维度题项较多,而不再是单一的变量,因此我们要使用AMOS结构方程进行处理。​ 举个例子,比如对住院患者的相关研究,设置了患者在住院期间的适应性量表和自我效能的量表,想考察患者适应性与自我效能之间的影响关系,或者说适应性的强弱是否会影响到患者自我效能的高低。此时适应性量表和自我效能量表都不是单一的变量,而是有N个题项构成的... 阅读详情

相关推荐

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 432

Msyql实现树的某个节点下的所有记录查询

方法一: 设计表的时候就设计好,创建一个 路径字段,不过一般做 树 的时候,都会有这个字段,直接like路径字段就好了 方法二: 在没有这个字段的情况下,数据库表里只能看到一个 父节点字段,那该如何是好? mysql里没有递归查询的语法,只能自己谐函数了 示例: 创建函数(需要便利的字段我这里是 varvhar 类型的,如果是int 可以改参数类型为INT) CREATE FUNCTION "...

weixin_39433171的博客 621

【慧创近红外脑功能成像(fNIRS)】经皮耳迷走神经电刺激联用应用集锦

在这项双盲、随机、对照的试验中,将40例亚急性脑卒中患者随机分为两组:VNS组(VG)在TOT期间接受taVNS治疗,假手术组(SG)在TOT期间接受假taVNS治疗。此外,fNIRS显示,与SG相比,VG的对侧前额叶皮层和同侧感觉运动皮层的激活增加。然而,HRV组间无显著差异。结合taVNS技术,不仅能够探索taVNS对大脑功能产生的具体影响,还能通过精细调整刺激参数,进一步优化治疗效果,使之更加精准高效。这种治疗模式的创新,有望显著提升患者的治疗效果,改善其生活质量,为神经系统疾病的康复开辟新途径。

m0_75194604的博客 1139

从mysql数据库获取树数据库_数据库mysql 使用存储过程实现树节点的获取方法

如图:表数据这样的一棵树,如何获取“高寅瑞”下的所有节点(一条sql语句是肯定搞不定的)通过存储过程来写DELIMITER //CREATE FUNCTION `getChildLst`(rootId INT)RETURNS varchar(1000) READS SQL DATABEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempChd VARCHAR(1...

weixin_29502579的博客 255

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

摘要:YOLOv4在目标检测领域实现了精度与速度的平衡,通过CSPDarknet53骨干网络、SPP+PANet特征融合及CIoU损失函数等创新,在MS COCO数据集达到65.7% AP50,V100显卡实现62FPS实时检测。核心优化包括Mosaic数据增强、自对抗训练和解耦头结构,显著提升小目标检测和遮挡场景鲁棒性。代码实现采用CSP模块和SPP多尺度池化,兼顾计算效率与检测性能,为工业落地提供高效解决方案。(149字)

一碗白开水一 1358

java 处理mysql获取树形的数据

java 处理mysql获取树形的数据 目录 处理一: 使用对象的方式 TreeModel TreeModelList TreeModelListTest 结果: 处理二: Map对象的方式 CommonTree: CommonTreeTest 总结: 在使用mysql数据库,要获取到省市区的数据(以福建的数据为例),返回树型结构的数据。 Mysql 是没办法用oracle的connect by prior了,直接数据库进行查询,因此考虑用java递归遍历,获取到树形的数据..

一路向前 3629

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 534

mysql递归查询所有子节点_MySQL递归查询树结构的节点下所有子节点列表

使用函数的方法查询:1.创建函数get_all_children_node(targetId)CREATE DEFINER=`root`@`%` FUNCTION `get_all_children_node`(targetId int) RETURNS varchar(1000) CHARSET utf8BEGINdeclare resultNode varchar(1000); -- ...

weixin_42521795的博客 892

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

室内温度控制仿真(Simulink+PLC)

本篇博客将会带领大家解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法

RXXW_Dor的博客 3462

mysql存储过程批量更新树型数据

MySQL存储过程批量更新树型数据 在数据库管理中,树型数据是一种常见的数据结构,它表示了数据之间的层级关系。在MySQL中,我们可以使用存储过程来批量更新树型数据。本文将介绍如何使用MySQL存储过程来实现这一功能,并提供代码示例。 树型数据结构 在MySQL中,树型数据通常通过自引用的外键来实现。假设我们有一个名为ca...

weixin_40290096的博客 178

BLDC&PMSM电机控制器硬件设计工程(一)概述&需求&规划

这里是一个专注于电机控制器硬件工程的开放社区与知识仓库。我们的核心使命是分享、交流与共创,致力于解开无刷直流电机(BLDC)和永磁同步电机(PMSM)中、大功率控制器硬件设计,包括驱动IC选型,电流传感器选型,控制IC,母线电容计算,功率模块(IGBT、MOS管)选型以及大功率功率模块驱动电源设计。功率等级: 重点关注中等功率(如500W-10kW) 并向大功率(10kW以上) 延伸,探讨对应的功率器件(如MOSFET, IGBT, SiC)选型与驱动。

小幽余生不加糖 637

树型结构数据存储实践

很多业务场景会遇到树形结构的数据,如公司的人员职级树、行政区划树等。使用类似MySQL的数据库进行存储,需要将树形结构(二维)存储到行格式(一维)的db中。本文介绍了树型结构数据存储的三种方式:Adjacency List , Nested Set , Bridge Table (Closure Table)。

weixin_41866717的博客 1556

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

实现论坛树型结构的具体算法

实现论坛树型结构的算法很多,具体你可以去www.chinaasp.com的全文搜索中查询。我现在的JSP论坛采用的也是当中的一种:不用递归实现树型结构的算法,现在我将论坛树型结构的具体算法和大家介绍一下,和大家一起交流。 1。演示表的结构: 表名:mybbslist 字段 数据类型 说明 BBSID 自动编号   RootID Int 根帖ID,本身为根帖则RootID = ID FID Int 

w9521423的博客 1081

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java将树型结构的Excel表格数据导入数据库(遇到的若干问题汇总)

1. 安装数据库(文章中使用的为MySQL) 2. 安装配置Java的jdk 3. 下载Java的数据库jar包 https://dev.mysql.com/downloads/windows/installer/8.0.html 使用Platform independent 下载任意一个都可 解压并将其jar文件放入项目lib文件夹下(没有可以自己创建一个) 并在项目配置的库中加入对该jar文件的依赖 4. 前期准备结束,接下来开始写代码 5. 首先准备一个Excel表,并将其转为.csv格式 6. 将

wyj123312的博客 2425

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL中存储与管理树型数据结构

原载地址:  http://www.wzjs163.com/tangshan/knowledge/mysql/38.html 介绍 大多数用户经常在某些场合需要在SQL数据库中存储树形结构数据,也清楚地知道管理树型结构不是关系型数据库的目标所在。关系型数据库的表不是分层次的(像XML),而一个简单平坦的列表。树型层次数据有一个父节点关系,在关系型数据库的表中不能自然的表示。 对我们来说,树

ManStar的专栏 2881

JSP实现论坛树型结构的具体算法

实现论坛树型结构的算法很多,具体你可以去www.chinaasp.com的全文搜索中查询。我现在的JSP论坛采用的也是当中的一种:不用递归实现树型结构的算法,现在我将论坛树型结构的具体算法和大家介绍一下,和大家一起交流。  1、演示表的结构:    表名:mybbslist    字段     数据类型  说明    BBSID    自动编号      RootID    Int     根

为理想而奋斗 864

根据树型数据结构分析Mysql索引

根据树型数据结构分析Mysql索引 – 引言 索引(Index)是帮助数据库高效获取数据的数据结构。索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址,并且把这些值存储在一个数据结构中。最常见的就是使用哈希表、B+树作为索引。 哈希表的数据结构就不再赘述,大家都清楚。那么B+树是一种什么结构? 本课将从树型基本数据结构讲起,一步步探究Mysql Innodb推荐选择B+树...

攀攀的专栏 485

树型数据结构SQL语句的写法

关键字: 树型数据结构sql语句的写法 Java代码 在一个关系数据库中,可以表现分等级的信息。 建立的表结构如下: [code="java"] CREATE TABLE employee ( emp_id NUMBER (4) CONSTRAINT emp_pk PRIMARY KEY, fname ...

owenyiyi的专栏 782

(2017.07.17-2017.07.21)周总结-树型结构总结

本周(2017.07.17-2017.07.21)的任务主要是创建一个树型结构的接口(类似Git的合并Merge操作)、一些业务的创建处理,抽取关联关系,以及常量表子段的设计和开发。 主要贡献有 关联关系管理器、树结构、常量表字段定义。 MYSQL由于Mysql不支持CTE,也就是循环调用。所以需要定义一个Function方法进行使用。以及树型结构如何在数据库内的存储。调查了一些资料,如下所示

Be yourself. 780

MySQL版的树型查询

NND,捣鼓了好长时间才捣鼓出来的MySQL树型查询。效率可能有点低。查询时间比较长。 第一种: 特点:效率有点慢 DROP PROCEDURE P_QUERY_EQUIPMENT_LIST; DROP PROCEDURE P_GET_EQUIPMENT_CHILDER; create PROCEDURE P_QUERY_EQUIPMENT_LIST(IN rootI...

tingyu_521的专栏 276

什么是MySQL索引

谈到MySQL索引,大家可能第一步想到的是,索引的定义,其次,就是它的用法,但是呢,我个人觉得,我们再学习MySQL之前呢,先要牢记一点。重要的事说三遍,,,。那么许多小伙伴们就想知道为什么呢?其实呢,正确的创建合适的索引是数据库性能优化的基础,大家可能就会说我又不是要当专门管理数据库的人,我要求这么多干嘛?当然,我不能强求什么,但是我对自己的要求就是这样,比较我想在Java开发这条路上越走越远,因为我还是想在将来当上架构师的,毕竟,每个人都要有梦想的,咸鱼总想翻身。...

夕月希的博客 393

MySQL-树型结构数据查询

MySQL-树型结构数据查询

hw2544622045的博客 5961
上一篇: 在URL中传递中文的解决方式
下一篇: MYSQL 安全添加/移除column 脚本
Carlos Chan
博客等级 码龄14年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值