当前位置: 首页 > news >正文

mysql递归查询及节点层级_Mysql中的递归层次查询(父节点下的所有节点)

在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询? 在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在MySQL中还没有对应的函数!!! 下面给出一个function来完成的方法 下面是sql脚本,想要运行的直接赋值粘贴进数据库即可。本人此文章的环境为mysql5.0,现在高版本建立函数出错请参考  解决建立函数报错问题

下面是sql脚本,想要运行的直接赋值粘贴进数据库即可。

创建表treenodes(可以根据需要进行更改)

– Table structure for treenodes

DROP TABLE IF EXISTS treenodes;

CREATE TABLE treenodes (

id int(11) NOT NULL,

nodename varchar(20) DEFAULT NULL,

pid int(11) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

– Table structure for treenodes

插入几条数据

– Records of treenodes

INSERT INTO treenodes VALUES (1, 'A', 0);

INSERT INTO treenodes VALUES (2, 'B', 1);

INSERT INTO treenodes VALUES (3, 'C', 1);

INSERT INTO treenodes VALUES (4, 'D', 2);

INSERT INTO treenodes VALUES (5, 'E', 2);

INSERT INTO treenodes VALUES (6, 'F', 3);

INSERT INTO treenodes VALUES (7, 'G', 6);

INSERT INTO treenodes VALUES (8, 'H', 0);

INSERT INTO treenodes VALUES (9, 'I', 8);

INSERT INTO treenodes VALUES (10, 'J', 8);

INSERT INTO treenodes VALUES (11, 'K', 8);

INSERT INTO treenodes VALUES (12, 'L', 9);

INSERT INTO treenodes VALUES (13, 'M', 9);

INSERT INTO treenodes VALUES (14, 'N', 12);

INSERT INTO treenodes VALUES (15, 'O', 12);

INSERT INTO treenodes VALUES (16, 'P', 15);

INSERT INTO treenodes VALUES (17, 'Q', 15);

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

根据传入id查询所有父节点的id

delimiter //

CREATE FUNCTION `getParList`(rootId INT)

RETURNS varchar(1000)

BEGIN

DECLARE sTemp VARCHAR(1000);

DECLARE sTempPar VARCHAR(1000);

SET sTemp = '';

SET sTempPar =rootId;

#循环递归

WHILE sTempPar is not null DO

#判断是否是第一个,不加的话第一个会为空

IF sTemp != '' THEN

SET sTemp = concat(sTemp,',',sTempPar);

ELSE

SET sTemp = sTempPar;

END IF;

SET sTemp = concat(sTemp,',',sTempPar);

SELECT group_concat(pid) INTO sTempPar FROM treenodes where pid<>id and FIND_IN_SET(id,sTempPar)>0;

END WHILE;

RETURN sTemp;

END

//

执行命令

select * from treenodes where FIND_IN_SET(id,getParList(15));

结果:

cc2a585449b2b258f23ed754c7b89fa6.png 

根据传入id查询所有子节点的id

delimiter //

CREATE FUNCTION `getChildList`(rootId INT)

RETURNS varchar(1000)

BEGIN

DECLARE sTemp VARCHAR(1000);

DECLARE sTempChd VARCHAR(1000);

SET sTemp = '$';

SET sTempChd =cast(rootId as CHAR);

WHILE sTempChd is not null DO

SET sTemp = concat(sTemp,',',sTempChd);

SELECT group_concat(id) INTO sTempChd FROM treeNodes where FIND_IN_SET(pid,sTempChd)>0;

END WHILE;

RETURN sTemp;

END

//执行命令

select * from treenodes where FIND_IN_SET(id,getChildList(7));

即可出现结果

相关文章:

  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • datax把text转mysql_使用DataX实现mysql数据迁移
  • haccp体系的参照标准是_食品安全标准与ISO、GMP、HACCP等体系之间的相互关系
  • mac mysql 多实例_Mac上mysql多端口实例配置并设置开机自动启动
  • mysql 主要有哪些函数_mysql中有哪些函数
  • mysql索引失效解决6_简单介绍MySQL索引失效的几种情况
  • java 获取方法的参数_Java 8中如何获取参数名称的方法示例
  • java gui程序运行_13.JAVA之GUI编程将程序打包jar
  • java输入输出学生成绩_java从键盘输入学生成绩,找出最高分,并输出学生成绩等级。...
  • java $ 解析api_Java版抖音解析接口
  • java 10的 6次方_【Java】 剑指offer(15) 数值的整数次方
  • java 方法 返回值 int_关于java字节流类的read()方法返回值为int的思考
  • java 迭代器复制_java设计模式之迭代器模式
  • java取文件类型_java如何通过文件描述符获取文件类型
  • java pdb_当12C PDB遇上JDBC
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • es6要点
  • Fastjson的基本使用方法大全
  • flutter的key在widget list的作用以及必要性
  • Js基础知识(四) - js运行原理与机制
  • js算法-归并排序(merge_sort)
  • Spring Boot快速入门(一):Hello Spring Boot
  • SQL 难点解决:记录的引用
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 类orAPI - 收藏集 - 掘金
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 通过git安装npm私有模块
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Java NIO(一)FileChannel
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 数据结构
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $GOPATH/go.mod exists but should not goland
  • (2)STL算法之元素计数
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六)Hibernate的二级缓存
  • (论文阅读30/100)Convolutional Pose Machines
  • (全注解开发)学习Spring-MVC的第三天
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十三)Flask之特殊装饰器详解
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)fock函数详解
  • (转)用.Net的File控件上传文件的解决方案
  • .bat批处理(一):@echo off
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net Core与存储过程(一)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 反射 Reflect
  • .net 无限分类
  • .NET 中让 Task 支持带超时的异步等待
  • .NET6 命令行启动及发布单个Exe文件