`
zengshaotao
  • 浏览: 778239 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mysql递归查询

 
阅读更多

##创建表

DROP TABLE IF EXISTS `t_areainfo`;

CREATE TABLE `t_areainfo` (

 `id` int(11) NOT '0' AUTO_INCREMENT,

 `level` int(11) DEFAULT '0',

 `name` varchar(255) DEFAULT '0',

 `parentId` int(11) DEFAULT '0',

 `status` int(11) DEFAULT '0',

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;

 

##初始化数据

INSERT INTO `t_areainfo` VALUES ('1', '0', '中国', '0', '0');

INSERT INTO `t_areainfo` VALUES ('2', '0', '华北区', '1', '0');

INSERT INTO `t_areainfo` VALUES ('3', '0', '华南区', '1', '0');

INSERT INTO `t_areainfo` VALUES ('4', '0', '北京', '2', '0');

INSERT INTO `t_areainfo` VALUES ('5', '0', '海淀区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('6', '0', '丰台区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('7', '0', '朝阳区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('46', '0', 'xx省1', '1', '0');

INSERT INTO `t_areainfo` VALUES ('47', '0', 'xx省2', '1', '0');

INSERT INTO `t_areainfo` VALUES ('48', '0', 'xx省3', '1', '0');

INSERT INTO `t_areainfo` VALUES ('49', '0', 'xx省4', '1', '0');

INSERT INTO `t_areainfo` VALUES ('50', '0', 'xx省5', '1', '0');

INSERT INTO `t_areainfo` VALUES ('51', '0', 'xx省6', '1', '0');

INSERT INTO `t_areainfo` VALUES ('52', '0', 'xx省7', '1', '0');

INSERT INTO `t_areainfo` VALUES ('53', '0', 'xx省8', '1', '0');

INSERT INTO `t_areainfo` VALUES ('54', '0', 'xx省9', '1', '0');

INSERT INTO `t_areainfo` VALUES ('55', '0', 'xx省10', '1', '0');

INSERT INTO `t_areainfo` VALUES ('56', '0', 'xx省11', '1', '0');

INSERT INTO `t_areainfo` VALUES ('57', '0', 'xx省12', '1', '0');

INSERT INTO `t_areainfo` VALUES ('58', '0', 'xx省13', '1', '0');

INSERT INTO `t_areainfo` VALUES ('59', '0', 'xx省14', '1', '0');

INSERT INTO `t_areainfo` VALUES ('60', '0', 'xx省15', '1', '0');

INSERT INTO `t_areainfo` VALUES ('61', '0', 'xx省16', '1', '0');

INSERT INTO `t_areainfo` VALUES ('62', '0', 'xx省17', '1', '0');

INSERT INTO `t_areainfo` VALUES ('63', '0', 'xx省18', '1', '0');

INSERT INTO `t_areainfo` VALUES ('64', '0', 'xx省19', '1', '0');

 

##向下递归查找

DROP FUNCTION IF EXISTS queryChildrenAreaInfoDown;

DELIMITER ;;

CREATE FUNCTION queryChildrenAreaInfoDown(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;;

DELIMITER ;

 

##向上递归查找

DROP FUNCTION IF EXISTS queryChildrenAreaInfoUp;

DELIMITER ;;

CREATE FUNCTION queryChildrenAreaInfoUp(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;;

DELIMITER ;

 

##使用验证

SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfoUp(4));

SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfoDown(1));

分享到:
评论

相关推荐

    MySQL递归查询

    MySQL 递归查询实现方法 MySQL 递归查询是指在 MySQL 中实现类似 Oracle Hierarchical Queries 的功能,用于查询树形结构中的所有子节点。由于 MySQL 目前还没有内置的递归查询功能,因此需要使用其他方法来实现。 ...

    mysql递归查询.txt

    ### MySQL 递归查询知识点详解 #### 一、MySQL 递归查询概述 在数据库查询中,递归查询主要用于处理层级或树形结构的数据。这类数据的特点是每一项记录不仅包含自身的信息,还可能与其他记录形成上下级关系。MySQL...

    两种mysql递归tree查询效率-mysql递归tree

    本文将介绍并比较以下两种MySQL递归查询方法: 1. **使用自连接和递归联合(RECURSIVE UNION)**:这种方法通过将表与自身连接,并通过递归地应用联合查询来构建层级结构。 2. **利用变量和循环**:这种方法通过在...

    mysql递归查询.doc

    MySQL 递归查询实现多分类查询 MySQL 递归查询是指在 MySQL 数据库中使用递归函数来实现树形结构数据的查询,例如部门表中某个部门的所有下属部分或者某个部分的所有上级部门。 在 MySQL 中实现递归查询需要使用...

    mysql 递归查询 树型结构 代码逻辑

    通过上述分析,我们可以看出MySQL递归查询结合Java代码能够高效地构建出树形结构。这种方法不仅适用于MySQL,对于其他支持递归查询的数据库也同样适用。在实际项目开发中,合理利用递归查询能够极大地简化对层次结构...

    地区表MySql递归sql脚本

    地区表MySql递归sql脚本

    MySQL实现递归查询的三种方式.rar

    在数据库管理中,递归查询是一种处理层次结构数据的有效方法,尤其在关系型数据库如MySQL中,递归查询可以帮助我们解决树形结构或有层级关系的数据检索问题。本资料主要探讨了MySQL中实现递归查询的三种常见方法:自...

    递归查询菜单树,支持mysql,oracle

    这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...

    MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    MyBatis是一个功能强大且灵活的持久层框架,它支持自查询和递归查询,下面我们将探讨如何使用MyBatis实现 N级联动效果。 递归查询 递归查询是指在一个查询中调用自身的查询,以便实现某些复杂的查询逻辑。在...

    mysql 递归

    用mysql实现oracle递归,通过with as 来实现

    MySQL递归查询树状表的子节点、父节点具体实现

    在MySQL中,处理树状结构的数据表时,由于不直接支持循环递归查询,因此需要采用一些特殊的技巧来实现对子节点和父节点的查找。本例中提到了两个存储过程,分别用于获取树状表中的子节点列表和父节点列表。 1. 获取...

    MySQL多种递归查询方法.docx

    ### MySQL多种递归查询方法详解 #### 一、Oracle中的递归查询方法 在Oracle数据库中,递归查询可以通过`START WITH CONNECT BY PRIOR`语句实现。此语句允许用户按照树状结构来检索数据。 ##### 1. `START WITH ...

    最新省市区联动查询,mysql数据全

    最新省市区联动SQL CREATE TABLE `regions` ( `id` int(6) UNSIGNED NOT NULL COMMENT '编号', `parent_id` int(6) NOT NULL DEFAULT 0 COMMENT '上级编号', `deep` tinyint(1) NOT NULL DEFAULT 0 COMMENT '层级...

    mysql递归调用获取树节点(子树)

    在提供的`mysql递归调用获取树节点(子树).doc`文档中,应该详细解释了这个过程,包括如何创建和执行存储过程,以及如何使用提供的测试数据。确保查看文档以获取完整的步骤和示例,以便在实际项目中成功应用这些...

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    在MySQL中,递归查询通常用于处理层次结构的数据,如组织结构、菜单系统或类别树等。当数据的层级关系无法预知或者可能无限深时,传统的JOIN操作可能无法满足需求,此时就需要自定义函数来实现递归查询。本文将详细...

    数据库设计之递归树查询

    本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...

    利用java+mysql递归实现拼接树形JSON列表的方法示例

    本篇文章将详细讲解如何利用Java和MySQL递归地实现拼接树形JSON列表的方法。 首先,我们需要理解问题的整体思路。在数据库中,我们可以将每个分类(或节点)存储为一个记录,包含ID、父ID(PID)以及名称等字段。...

Global site tag (gtag.js) - Google Analytics