`
happyqing
  • 浏览: 3152046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql递归查询,查父集合,查子集合

阅读更多

 

建函数

一、查父集合

--drop FUNCTION `getParentList`
CREATE FUNCTION `getParentList`(rootId varchar(100)) 
RETURNS varchar(1000) 
BEGIN 
DECLARE fid varchar(100) default ''; 
DECLARE str varchar(1000) default rootId; 

WHILE rootId is not null  do 
	SET fid =(SELECT parentid FROM treeNodes WHERE id = rootId); 
	IF fid is not null THEN 
		SET str = concat(str, ',', fid); 
		SET rootId = fid; 
	ELSE 
		SET rootId = fid; 
	END IF; 
END WHILE; 
return str;
END

 查询:

select getParentList('001001001001001'); 

select * from sbkfwh where FIND_IN_SET(id,getParentList('001001001001002')) 

 

二、查子集合 

--drop FUNCTION `getChildList`
CREATE FUNCTION `getChildList`(rootId varchar(100)) 
RETURNS varchar(2000)
BEGIN 
DECLARE str varchar(2000);
DECLARE cid varchar(100); 
SET str = '$'; 
SET cid = rootId; 
WHILE cid is not null DO 
	SET str = concat(str, ',', cid); 
	SELECT group_concat(id) INTO cid FROM treeNodes where FIND_IN_SET(parentid, cid) > 0; 
END WHILE; 
RETURN str; 
END

 

查询

select getParentList('001001001'); 
select * from sbkfwh where FIND_IN_SET(id,getChildList('001001001'))

 

Mysql函数中并不支持动态sql,Dynamic SQL is not allowed in stored function or trigger

要想查多个表的,可以建多个函数,或用以下方法

drop FUNCTION `getChildListTest`   
CREATE FUNCTION `getChildListTest`(tableName varchar(64),rootId varchar(100))    
RETURNS varchar(2000)   
BEGIN    
DECLARE str varchar(2000);   
DECLARE cid varchar(100);    
SET str = '$';    
SET cid = rootId;    

IF tableName = 'tableName1' THEN  
		WHILE cid is not null DO    
				SET str = concat(str, ',', cid);    
				SELECT group_concat(id) INTO cid FROM tableName1 where FIND_IN_SET(parentid, cid) > 0;   
		END WHILE;  
ELSEIF tableName = 'tableName2' THEN  
		WHILE cid is not null DO    
				SET str = concat(str, ',', cid);    
				SELECT group_concat(id) INTO cid FROM tableName2 where FIND_IN_SET(parentid, cid) > 0;   
		END WHILE;  
END IF;  

RETURN str;    
END

 

参考:

mysql 递归查询 (函数)

http://my.oschina.net/cheeryzxh007/blog/299475 (ID为INT型)

比较两种mysql递归tree查询效率-mysql递归tree  (函数,存储过程)

http://jingyan.baidu.com/article/647f01158ee0da7f2148a80b.html

MySQL中进行树状所有子节点的查询  (函数,存储过程)

http://blog.csdn.net/ACMAIN_CHM/article/details/4142971

分享到:
评论

相关推荐

    递归查询数据库,返回List到前台

    树形结构,输入一个分公司,可以查询该分公司下的所以子公司,包括子公司的子公司,无穷级下去!

    MYSQL无限分类算法文档

    不解MYSQL高级数据管理的相关技巧,包括了一些必要的SQL语句和高级数据管理的讲解,像邻接表模型、检索整树、检索所有叶子节点、检索单一路径、邻接表模型的局限性、嵌套集合(Nested Set)模型、检索子树的深度、嵌套...

    程序员的SQL金典6-8

     8.4 集合运算符与子查询  8.4.1 IN运算符  8.4.2 ANY和SOME运算符  8.4.3 ALL运算符  8.4.4 EXISTS运算符  8.5 在其他类型SQL语句中的子查询应用  8.5.1 子查询在INSERT语句中的应用  8.5.2 子查询在UPDATE...

    程序员的SQL金典7-8

     8.4 集合运算符与子查询  8.4.1 IN运算符  8.4.2 ANY和SOME运算符  8.4.3 ALL运算符  8.4.4 EXISTS运算符  8.5 在其他类型SQL语句中的子查询应用  8.5.1 子查询在INSERT语句中的应用  8.5.2 子查询在UPDATE...

    程序员的SQL金典4-8

     8.4 集合运算符与子查询  8.4.1 IN运算符  8.4.2 ANY和SOME运算符  8.4.3 ALL运算符  8.4.4 EXISTS运算符  8.5 在其他类型SQL语句中的子查询应用  8.5.1 子查询在INSERT语句中的应用  8.5.2 子查询在UPDATE...

    程序员的SQL金典3-8

     8.4 集合运算符与子查询  8.4.1 IN运算符  8.4.2 ANY和SOME运算符  8.4.3 ALL运算符  8.4.4 EXISTS运算符  8.5 在其他类型SQL语句中的子查询应用  8.5.1 子查询在INSERT语句中的应用  8.5.2 子查询在UPDATE...

    程序员的SQL金典.rar

     8.4 集合运算符与子查询  8.4.1 IN运算符  8.4.2 ANY和SOME运算符  8.4.3 ALL运算符  8.4.4 EXISTS运算符  8.5 在其他类型SQL语句中的子查询应用  8.5.1 子查询在INSERT语句中的应用  8.5.2 子查询在UPDATE...

    j2ee学习路径 对初学者很有帮助

    多表连接,内外连接, 子查询等 管理表、视图、索引、序列、约束等 树状结构存储 存储过程、触发器 数据库设计三范式、 3:JDBC JDBC基础 连接池 树状结构存储与展现 DataSource & RowSet JDBC连接Oracle及...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 多表查询之复合查询与子查询 05 mysql之索引 第48章 01 python操作数据库pymysql 02 数据库之事务 03 mysql事务之savepoint 第49章 01 http协议之请求协议 02 http协议之响应协议 03 web框架的概念 04 做一个...

    SQL培训第一期

    //递归查询父节点 select t.* from g_organ t start with t.organcode = '080' connect by t.parentcode = prior t.organcode; //递归查询子节点 1.8.7 union 和 union all 1.8.7.1 语法 select * from dual union ...

    经历BAT面试后总结的【高级Java后台开发面试指南】,纯净干货无废话,针对高频面试点

    集合 多线程 IO 问题排查 Web框架、数据库 Spring MySQL Redis 通用基础 操作系统 网络通信协议 排序算法 常用设计模式 从URL到看到网页的过程 分布式 CAP理论 锁 事务 消息队列 协调器 ID生成方式 一致性hash 限流 ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    mysql 连接查询 mysql 事务与索引 mysql python交互 sqlalchemy orm介绍 sqlalchemy 常用语法 sqlalchemy 外键关联 sqlalchemy 多外键关联 sqlalchemy 多对多关联 作业之学员管理系统开发 第13周 堡垒机框架开发...

    老男孩第三期Python全栈开发视频教程 零基础系统学习Python开发视频+资料

    ├─(51) 04 python s3 day47 多表查询之复合查询与子查询.avi ├─(52) 05 python s3 day47 mysql之索引.avi (12)\\python全栈day41-50\\python全栈s3 day48;目录中文件数:3个 ├─(53) 01 python s3 day48 python...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    (全)传智播客PHP就业班视频完整课程

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    史上最全传智播客PHP就业班视频课,8月份视频

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

Global site tag (gtag.js) - Google Analytics