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 ...
随机推荐
- 【小白的CFD之旅】15 四种境界
天气不错,小白一大早就起床了,吃过早餐就往奔实验室而去.路上碰到了同去实验室的小牛师兄. "小白,这么早啊",小牛师兄老远就发现了小白,打招呼道. "早啊,牛师兄,刚吃完 ...
- 【转载、推荐】不要自称是程序员,我十多年的 IT 职场总结
注评:一气读完后,有些和我的观点类似.这篇文章显然是外国老写的,但是不妨碍我们的跨国交流. 如果我可以给每个工程教育增加一门课,它不会涉及编译器.门电路或是时间复杂度,而是一门介绍行业现实的入门课,因 ...
- 第7章 权限管理(1)_ACL权限
1. ACL权限 1.1 ACL权限简介与开启 (1)ACL权限简介 ①ACL是Access Control List的缩写,主要目的是在提供传统的owner,group,others的read,wr ...
- iOS状态栏---学习笔记六
一.设置状态栏的颜色. //1.需要在自定义导航的时候,设置顶部视图 - (UIViewController *)childViewControllerForStatusBarStyle{ retur ...
- IO(六)--- 编码和解码
编码: 把看得懂的字符变成看不懂码值这个过程我们称作为编码. 解码: 把码值查找对应的字符,我们把这个过程称作为解码. 注意: 以后编码与解码一般我们都使用统一的码表.否则非常容易出乱码. 常用码表: ...
- thrift中的超时(timeout)坑
最近在项目中采用thrift作为后台服务rpc框架,总体用下来性能还不错,跨语言特性使用起来也还行,但是也遇到了一些坑,其中之一就是超时问题(timeout),如果服务端些的某些业务场景耗时较长,th ...
- 【笔记5】用pandas实现矩阵数据格式的推荐算法 (基于物品的协同)
''' 基于物品的协同推荐 矩阵数据 说明: 1.修正的余弦相似度是一种基于模型的协同过滤算法.我们前面提过,这种算法的优势之 一是扩展性好,对于大数据量而言,运算速度快.占用内存少. 2.用户的评价 ...
- Computer vision labs
积累记录一些视觉实验室,方便查找 1. 多伦多大学计算机科学系 2. 普林斯顿大学计算机视觉和机器人实验室 3. 牛津大学Torr Vision Group 4. 伯克利视觉和学习中心 Pro ...
- 序列化效率比拼——谁是最后的赢家Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- VMware Workstation中网络连接之桥接、NAT和Host-only
在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...