mysql实现递归查询的方法

55次阅读
没有评论

共计 4399 个字符,预计需要花费 11 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 mysql 实现递归查询的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

mysql 实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set()】函数和【group_concat()】函数实现递归查询。

mysql 实现递归查询的方法:

1、创建表

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;

2、初始数据

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 ( 8 , 0 , 北京 XX 区 1 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 9 , 0 , 北京 XX 区 2 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 10 , 0 , 北京 XX 区 3 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 11 , 0 , 北京 XX 区 4 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 12 , 0 , 北京 XX 区 5 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 13 , 0 , 北京 XX 区 6 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 14 , 0 , 北京 XX 区 7 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 15 , 0 , 北京 XX 区 8 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 16 , 0 , 北京 XX 区 9 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 17 , 0 , 北京 XX 区 10 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 18 , 0 , 北京 XX 区 11 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 19 , 0 , 北京 XX 区 12 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 20 , 0 , 北京 XX 区 13 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 21 , 0 , 北京 XX 区 14 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 22 , 0 , 北京 XX 区 15 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 23 , 0 , 北京 XX 区 16 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 24 , 0 , 北京 XX 区 17 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 25 , 0 , 北京 XX 区 18 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 26 , 0 , 北京 XX 区 19 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 27 , 0 , 北京 XX 区 1 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 28 , 0 , 北京 XX 区 2 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 29 , 0 , 北京 XX 区 3 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 30 , 0 , 北京 XX 区 4 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 31 , 0 , 北京 XX 区 5 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 32 , 0 , 北京 XX 区 6 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 33 , 0 , 北京 XX 区 7 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 34 , 0 , 北京 XX 区 8 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 35 , 0 , 北京 XX 区 9 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 36 , 0 , 北京 XX 区 10 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 37 , 0 , 北京 XX 区 11 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 38 , 0 , 北京 XX 区 12 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 39 , 0 , 北京 XX 区 13 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 40 , 0 , 北京 XX 区 14 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 41 , 0 , 北京 XX 区 15 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 42 , 0 , 北京 XX 区 16 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 43 , 0 , 北京 XX 区 17 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 44 , 0 , 北京 XX 区 18 , 4 , 0 
INSERT INTO `t_areainfo` VALUES ( 45 , 0 , 北京 XX 区 19 , 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

3、向下递归

利用 find_in_set() 函数和 group_concat() 函数实现递归查询:

mysql 实现递归查询的方法

DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
DELIMITER ;;
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) 
END WHILE;
RETURN sTemp;
DELIMITER ;

4、调用方式

SELECT queryChildrenAreaInfo(1);

mysql 实现递归查询的方法

查询 id 为 4 下面的所有节点

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

5、向上递归

DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;
DELIMITER;;
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;
DELIMITER ;

6、调用方式

查询 id 为 7 的节点的所有上级节点:

SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));

mysql 实现递归查询的方法

看完了这篇文章,相信你对 mysql 实现递归查询的方法有了一定的了解,想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计4399字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)