程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql 樹形結構查詢(存儲過程)

mysql 樹形結構查詢(存儲過程)

編輯:關於MYSQL數據庫

  就用數據數據庫表地址數據(中國地區) 來說吧(用Windows 請使用 gbk !!)

  可直接運行(去除注解)

  存儲過程:

DELIMITER//
dropprocedureifexists findLChild//
/*iid遞歸父節點,layer允許遞歸深度*/
CREATEPROCEDUREfindLChild(iidbigint(20),layerbigint(20))
 BEGIN
  /*創建接受查詢的臨時表*/
  createtemporary tableifnotexiststmp_table(idbigint(20),namevarchar(50))ENGINE=InnoDBDEFAULTCHARSET=utf8;
  /*最高允許遞歸數*/
  SET@@max_sp_recursion_depth=99;
  calliterative(iid,layer);/*核心數據收集*/
  select*fromtmp_table;/*展現*/
  droptemporary tableif exists tmp_table;/*刪除臨時表*/
  END;//
DELIMITER;
DELIMITER//
dropprocedureifexists iterative//
CREATEPROCEDUREiterative(iidbigint(20),layerbigint(20))
  BEGIN
    declaretidbigint(20)default-1;
    declaretnamevarchar(50)charactersetutf8;
    /*游標定義*/
    declarecur1CURSORFORselectid,namefromlocationwherefid=iid;
    declareCONTINUEHANDLERFORSQLSTATE'02000'SETtid=null;
   
   /*允許遞歸深度*/
   iflayer>0then
    OPENcur1;
    FETCHcur1INTOtid,tname;
     WHILE(tidisnotnull)
      DO
       /*核心數據收集*/
     insertintotmp_tablevalues(tid,tname);
       calliterative(tid,layer-1);
       FETCHcur1INTOtid,tname;
     ENDWHILE;
   endif;
  END;//
DELIMITER;

  //運行!!

MySQL> call findLChild(1,1);
+------+------------------+
| id  | name       |
+------+------------------+
|  2 | 北京       |
|  4 | 上海       |
|  6 | 香港特別行政區  |
|  8 | 澳門特別行政區  |
|  10 | 河北       |
|  23 | 山西       |
|  35 | 遼寧       |
|  50 | 吉林       |
|  60 | 黑龍江      |
|  74 | 江蘇       |
|  88 | 浙江       |
| 101 | 安徽       |
| 119 | 福建       |
| 129 | 江西       |
| 142 | 山東       |
| 160 | 河南       |
| 179 | 湖北       |
| 198 | 湖南       |
| 213 | 廣東       |
| 235 | 甘肅       |
| 250 | 四川       |
| 272 | 貴州       |
| 282 | 海南       |
| 301 | 雲南       |
| 318 | 青海       |
| 327 | 陝西       |
| 348 | 廣西壯族自治區  |
| 363 | 西藏自治區    |
| 371 | 寧夏回族自治區  |
| 377 | 新疆維吾爾自治區 |
| 400 | 內蒙古自治區   |
| 413 | 台灣省      |
+------+------------------+
32 rows in set (0.02 sec)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved