<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

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

      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知識。




      日韩精品一区二区三区高清