mysql 递归查询
1、创建表:
DROP TABLE IF EXISTS `t_areainfo`;
CREATE TABLE `t_areainfo` (
`id` int(11) NOT '' AUTO_INCREMENT,
`level` int(11) DEFAULT '',
`name` varchar(255) DEFAULT '',
`parentId` int(11) DEFAULT '',
`status` int(11) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;
2、初始数据:
INSERT INTO `t_areainfo` VALUES ('', '', '中国', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '华北区', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '华南区', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '海淀区', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '丰台区', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '朝阳区', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区1', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区2', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区3', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区4', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区5', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区6', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区7', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区8', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区9', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区10', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区11', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区12', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区13', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区14', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区15', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区16', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区17', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区18', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区19', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区1', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区2', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区3', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区4', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区5', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区6', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区7', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区8', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区9', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区10', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区11', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区12', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区13', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区14', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区15', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区16', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区17', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区18', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', '北京XX区19', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省1', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省2', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省3', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省4', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省5', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省6', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省7', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省8', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省9', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省10', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省11', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省12', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省13', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省14', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省15', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省16', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省17', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省18', '', '');
INSERT INTO `t_areainfo` VALUES ('', '', 'xx省19', '', '');
3、向下递归:
利用find_in_set()函数和group_concat()函数实现递归查询:
DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
CREATE FUNCTION queryChildrenAreaInfo(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000); SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR); WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;
4、调用方式:
SELECT queryChildrenAreaInfo(1);
查询id为"4"下面的所有节点
SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));
5、向上递归:
DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;
CREATE FUNCTION queryChildrenAreaInfo1(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000); SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);
SET sTemp = CONCAT(sTemp,',',sTempChd); SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
WHILE sTempChd <> 0 DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
END WHILE;
RETURN sTemp;
END;
6、调用方式:
查询id为"7"的节点的所有上级节点:
SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));
mysql 递归查询的更多相关文章
- 包含mysql 递归查询父节点 和子节点
包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...
- MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集的使用
1-前言: 在Mysql使用递归查询是很不方便的,不像Sqlserver可以直接使用声明变量,使用虚拟表等等.如:DECLARE,BEGIN ... END ,WHILE ,IF 等等. 在My ...
- MySQL递归查询树状表的子节点、父节点具体实现
mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...
- 递归的实际业务场景之MySQL 递归查询
喜欢就点个赞呗! 源码<--请点击此处查看 引入 当我看到一些评论时,例如下面的样子.我挺好奇这个功能是怎么样做出来的.进过查阅资料,发现这其实是 MySQL 的递归操作.下面就让我操作一下怎么 ...
- MySQL递归查询
MySQL8.0已经支持CTE递归查询,举例说明 CREATE TABLE EMP (EMPNO integer NOT NULL, ENAME ), JOB ), MGR integer, HIRE ...
- MySQL递归查询所有子节点,树形结构查询
--表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...
- MySQL递归查询树状表的子节点、父节点
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ...
- mysql 递归查询 主要是对于层级关系的查询
最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在 ...
- MySQL递归查询父子节点
1.表结构 CREATE TABLE folder( id BIGINT(20) NOT NULL, parent_id BIGINT(20) DEFAULT NULL, PRIMARY KEY id ...
随机推荐
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- openstack想说爱你不容易
网上一牛人的博客专门写的是关于openstack的,看晕了.先收藏下.猛击下面的地址 http://www.cnblogs.com/popsuper1982/
- DBCP连接池简介
DBCP连接池简介 1.数据库连接基础 数据库连接池基础主要包括以下三个方面的内容:数据库连接池的基本概念.数据库连接池的工作原理.Java开源的连接池.下面将从这三个方面一一介绍: (1)数据库连接 ...
- C# Regex实例
regex1 @"w*(?<Rawsize>\d*x\d*x\d*)\D*(?<RawResolution>(\d*p\d*x*){0,3})_\w*" 测 ...
- Java Generics and Collections-2.2
2.2 Wildcards with extends 前面介绍过List<Integer>不是List<Number>的子类,即前者不能替换后者, java使用? extend ...
- 并查集补集作法 codevs 1069 关押罪犯
1069 关押罪犯 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控
Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了. 以下是公司线上的zabbix3.0环境下添加 ...
- IP地址查询接口及调用方法
1.查询地址 搜狐IP地址查询接口(IP):http://pv.sohu.com/cityjson 1616 IP地址查询接口(IP+地址):http://w.1616.net/chaxun/ipto ...
- MVP模式(Android)
以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也是使用类似MVC的架构(严格来讲,之前的项目还算不上MV ...
- 备忘:aliyun maven mirror
<mirror> <id>alimaven</id> <name>aliyun maven</name> &l ...