久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

實現mysql樹查詢的功能

193次閱讀
沒有評論

共計 2284 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家分享的是有關實現 mysql 樹查詢的功能的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。

需求:查找當前 (任意) 級別下的所有子節點。

通過自定義 mysql 函數實現, 先貼代碼,后面給出詳細說明:

delimiter $$
CREATE FUNCTION `getChildList`(rootId INT)
RETURNS varchar(1024)
BEGIN
 DECLARE childListStr VARCHAR(1024);
 DECLARE tempChildStr VARCHAR(1024);
 DECLARE rootIdStr VARCHAR(64);
 SET childListStr=NULL;
 SET rootIdStr=cast(rootId as CHAR);
 myloop: WHILE TRUE
 SELECT GROUP_CONCAT(id) INTO tempChildStr FROM test where FIND_IN_SET(parrent_id,rootIdStr) 
 IF tempChildStr IS NOT NULL THEN
 SET rootIdStr=tempChildStr;
 IF childListStr IS NULL THEN
 SET childListStr=tempChildStr;
 ELSE
 SET childListStr=concat(childListStr, , ,tempChildStr);
 END IF;
 ELSE
 LEAVE myloop;
 END IF;
 END WHILE;
 RETURN childListStr;
END $$

建表 sql:

CREATE TABLE `test` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `parrent_id` int(11) DEFAULT 0 ,
 `name` varchar(32) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| parrent_id | int(11) | YES | | 0 | |
| name | varchar(32) | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
+----+------------+------+
| id | parrent_id | name |
+----+------------+------+
| 1 | 0 | cg1 |
| 2 | 1 | cg2 |
| 3 | 2 | cg3 |
| 4 | 3 | cg4 |
| 5 | 4 | cg5 |
| 6 | 5 | cg6 |
| 7 | 6 | cg7 |
| 8 | 7 | cg8 |
| 9 | 8 | cg9 |
| 10 | 1 | cg10 |
| 11 | 2 | cg11 |
+----+------------+------+

第 1 行:
delimiter 編寫函數體內容的時候,需要使用 DELIMITER 關鍵字將分隔符先修改為別的,否則編寫語句的時候寫到 的時候會直接執行,導致函數編寫失敗

2- 4 行:mysql 函數語法規范,不多解釋

5- 9 行:定義邏輯所需變量。

childListStr:最終返回的子節點 ids_str(例如: 1,2,3,4,5)。
tempChildStr: 臨時子節點 ids_str(例如: 1)。
rootIdStr: 輸入根節點轉換為 char 類型。

10-23 行:整個函數最關鍵的地方在 while 里面對 tempChildStr 的處理,以及對 內置函數 GROUP_CONCAT 和 FIND_IN_SET 的理解

每一次循環, 通過 GROUP_CONCAT 函數找出輸入的根節點的直接下級節點,通過 GROUP_CONCAT 函數得到這些子節點的 id 組成的字符串。并將這次得到的子字符串作為根節點,去尋找下一級的所有的子節點。最后找到最后子節點沒有下級時候,tempChildStr IS NOT NULL。退出循環,返回結果。

運行結果:

mysql select getChildList(1);
+-----------------------+
| getChildList(1) |
+-----------------------+
| 2,10,3,11,4,5,6,7,8,9 |
+-----------------------+
1 row in set (0.00 sec)
mysql select getChildList(2);
+------------------+
| getChildList(2) |
+------------------+
| 3,11,4,5,6,7,8,9 |
+------------------+
1 row in set (0.00 sec)

感謝各位的閱讀!關于實現 mysql 樹查詢的功能就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計2284字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 江西省| 南宁市| 沈丘县| 潢川县| 巧家县| 井冈山市| 平阳县| 扶余县| 侯马市| 呼和浩特市| 巧家县| 庆云县| 大城县| 水城县| 汨罗市| 忻州市| 武隆县| 阳原县| 兖州市| 孝义市| 望江县| 兴海县| 凌海市| 天长市| 长岛县| 雷波县| 伊宁县| 乌拉特后旗| 天柱县| 肃宁县| 邢台市| 木里| 三穗县| 湛江市| 灌阳县| 开平市| 信丰县| 石林| 丰顺县| 临清市| 临潭县|