六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

25行完成mysql樹查詢代碼詳細說明

[摘要]本文主要和大家分享25行實現mysql樹查詢代碼詳解,希望能幫助到大家。需求:查找當前(任意)級別下的所有子節點。通過自定義mysql函數實現,先貼代碼,后面給出詳細說明:delimiter $$C...
本文主要和大家分享25行實現mysql樹查詢代碼詳解,希望能幫助到大家。

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

通過自定義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
    DO
        SELECT GROUP_CONCAT(id) INTO tempChildStr FROM test where FIND_IN_SET(parrent_id,rootIdStr)>0;
        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)

相關推薦:

SQL語句實現子孫樹查詢經典實例

mysql-使用MYSQL實現oracle start with connect by遞歸樹查詢

Oracle樹查詢及相關函數

以上就是25行實現mysql樹查詢代碼詳解的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 日本免费看片在线播放 | 亚洲va久久久噜噜噜久久男同 | 亚洲免费网 | 日本国产欧美 | 中文字幕在亚洲第一在线 | 亚洲成a人片在线观看播放 亚洲成a人片在线观看www | 日本免费网站视频 | 天天操天天射天天舔 | 天天操天天干天天玩 | 欧洲一级视频 | 欧美在线视频免费观看 | 四虎在线永久视频观看 | 天天操天天擦 | 亚洲图片另类 | 天天看逼| 揉女胸视频www网站免费观看 | 日韩中文字幕免费版 | 中文字幕天堂网 | 五月天婷婷在线视频国产在线 | 色偷偷影院 | 视频免费1区二区三区 | 日本特黄特色aa大片免费 | 一区二区免费看 | 青青青在线视频免费 | 伊人久久网站 | 中文字幕在线观看亚洲日韩 | 中文区永久区乱码六区 | 日韩精品一区二区三区毛片 | 日本高清视频免费看 | 亚洲影视在线 | 中文字幕免费人成乱码中国 | 日韩黄页 | 青娱乐最新 | 青青青视频精品中文字幕 | 先锋资源国产 | 天天干天天操天天射 | 日本黄色福利视频 | 四虎影永久在线观看精品 | 欧洲性开放大片免费观看视频 | 深爱激情五月婷婷 | 亚洲欧美日韩在线播放 |