描述:最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询? 在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在MySQL中还没有对应的函数!!! 下面给出一个function来完成的方法 下面是sql脚本,想要运行的直接赋值粘贴进数据库即可。

好记性不如烂笔头
下面给出一个function来完成的方法

下面是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’); 

把下面的语句直接粘贴进命令行执行即可(注意修改传入的参数,默认rootId,表明默认treenodes)

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

delimiter //
CREATE FUNCTION `getParList`(rootId INT)
RETURNS varchar(1000)
BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempPar VARCHAR(1000); SET sTemp = ''; SET sTempPar =rootId; #循环递归WHILE sTempPar is not null DO #判断是否是第一个,不加的话第一个会为空IF sTemp != '' THENSET sTemp = concat(sTemp,',',sTempPar);ELSESET 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));
结果:

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

delimiter //
CREATE FUNCTION `getChildList`(rootId INT)
RETURNS varchar(1000) BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempChd VARCHAR(1000);SET sTemp = '$';SET sTempChd =cast(rootId as CHAR);WHILE sTempChd is not null DOSET 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));
结果:

转载于:https://www.cnblogs.com/wenBlog/p/10862183.html

mysql 层级结构查询相关推荐

  1. mysql树形结构查询_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  2. MySql层级树查询

    2019独角兽企业重金招聘Python工程师标准>>> DROP TABLE IF EXISTS `employees`; CREATE TABLE `employees` (`em ...

  3. mysql 表结构查询的SQL语句

    1.查看表结构 desc student; 2.查看表的DDL语句 show create table student; 3.查看列的结构信息 select column_name,data_type ...

  4. mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  5. mysql 树形结构 sql_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  6. mysql 查询树形结构_MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  7. mysql树形结构 无限分类_使用 authenticationDatabase 参数连接 aliyun 上的 MongoDB - SegmentFault 思否...

    在一些系统中,对内容进行分类是必需的功能.比如电商就需要对商品做分类处理,以便于客户搜索:论坛也会分为很多板块:门户网站.也得对网站的内容做各种分类. 分类对于一个内容展示系统来说是不可缺少的,本博客 ...

  8. 企业行业树形图,层级结构展示

    企业行业树形图,层级结构展示 一.业务需求 按照行业分类标准,实现行业间的层级关系,标准中行业分为四级,门类–大类–中类–小类,点击最后一层小类时,打开该类行业的查询结果页面,还有一点就是如果企业表中 ...

  9. MySQL 代码结构与基本流程

    一.MySQL基本架构 二.MySQL目录结构 build: 内含有各个平台.各种编译器下进行编译的脚本.如compile-pentium-debug表示在pentium架构上进行调试编译的脚本. c ...

最新文章

  1. Taglib原理和实现:再论El和JST
  2. go语言笔记——是c开发的 lex yacc进行词法和语法分析,go不支持函数和运算符重载,不支持类型继承,也不支持断言,还有泛型...
  3. python是什么编程教程-python教程看完了,还是不会编程?
  4. 在ASP.NET中为GridView添加删除提示框
  5. STM32F4 HAL库开发 -- 复用功能外设
  6. Pots POJ - 3414(bfs)
  7. c语言每个整数占9列,c语言 第五章 数据类型和表达式.ppt
  8. 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
  9. [转]模拟电路设计经典教材推荐
  10. Ubuntu 12.04下安装Oracle Express 11gR2
  11. 一张图展示一段js代码的一生,变量对象、作用域链、闭包、this
  12. python中的文件怎么处理_python 中有关文件处理
  13. EXPLAIN 具体含义 ( type possible_key key key_len ref )
  14. Kotlin教程(五)类型
  15. JSP 页面实现一个计算器功能
  16. 最全行车记录仪主控芯片及方案排名TOP15、行车记录仪终端品牌厂商代表产品和方案排名TOP50
  17. windows cmd 提示 ‘系统找不到指定路径‘ 提示 ‘ECHO 处于关闭状态‘
  18. 关于电路中输入阻抗和输出阻抗大小的讨论
  19. 1等于0.循环9吗?
  20. 【源码之下无秘密】ArrayList:在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?

热门文章

  1. 纪中2016.10.6比赛不明总结
  2. 【原创】请不要对Boost Format使用Byte作为参数
  3. 对数据库连接池的理解
  4. 最小路径覆盖,最小点覆盖,最大独立点集(转)
  5. 【leetcode】Integer to Roman
  6. HTML5边玩边学(9):俄罗斯方块就是这么简单 之 数据模型篇
  7. oracle中的Number的长度定义
  8. android layout(l, t, r, b);,服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题...
  9. html 像素跟百分比,html – 将百分比宽度与边距(以像素为单位)组合起来
  10. php ip2long mysql,PHP基于ip2long实现IP转换整形