共計 4486 個字符,預計需要花費 12 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 mysql 怎樣遞歸查詢所有數據,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
mysql 遞歸查詢所有數據的方法:首先創建表,并初始數據;然后利用【find_in_set()】函數和【group_concat()】函數實現遞歸查詢,代碼為【SELECT queryChildrenAreaInfo(1);
】。
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() 函數實現遞歸查詢:
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);
查詢 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 怎樣遞歸查詢所有數據的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節丸趣 TV 網 – 提供最優質的資源集合!
正文完