午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > MySQL 實現(xiàn)樹的遍歷詳解及簡單實現(xiàn)示例

MySQL 實現(xiàn)樹的遍歷詳解及簡單實現(xiàn)示例

熱門標(biāo)簽:南通電銷外呼系統(tǒng)哪家強 東莞外呼企業(yè)管理系統(tǒng) 清遠(yuǎn)申請400電話 沈陽智能外呼系統(tǒng)供應(yīng)商 桂林云電銷機器人收費 谷歌地圖標(biāo)注位置圖解 地圖簡圖標(biāo)注 如何選擇優(yōu)質(zhì)的外呼系統(tǒng) 手機外呼系統(tǒng)違法嗎

MySQL 實現(xiàn)樹的遍歷

經(jīng)常在一個表中有父子關(guān)系的兩個字段,比如empno與manager,這種結(jié)構(gòu)中需要用到樹的遍歷。在Oracle 中可以使用connect by簡單解決問題,但MySQL 5.1中還不支持(據(jù)說已納入to do中),要自己寫過程或函數(shù)來實現(xiàn)。

一、建立測試表和數(shù)據(jù):


DROP TABLE IF EXISTS `channel`; 
 
CREATE TABLE `channel` ( 
 `id` int(11) NOT NULL AUTO_INCREMENT,  
 `cname` varchar(200) DEFAULT NULL, 
 `parent_id` int(11) DEFAULT NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; 
 
/*Data for the table `channel` */ 
 
insert into `channel`(`id`,`cname`,`parent_id`)  
values (13,'首頁',-1), 
    (14,'TV580',-1), 
    (15,'生活580',-1), 
    (16,'左上幻燈片',13), 
    (17,'幫忙',14), 
    (18,'欄目簡介',17); 

 二、利用臨時表和遞歸過程實現(xiàn)樹的遍歷(MySQL的UDF不能遞歸調(diào)用):


DELIMITER $$ 
 
USE `db1`$$ 
 
 
-- 從某節(jié)點向下遍歷子節(jié)點 
-- 遞歸生成臨時表數(shù)據(jù) 
DROP PROCEDURE IF EXISTS `createChildLst`$$ 
 
CREATE PROCEDURE `createChildLst`(IN rootId INT,IN nDepth INT) 
BEGIN 
   DECLARE done INT DEFAULT 0; 
   DECLARE b INT; 
   DECLARE cur1 CURSOR FOR SELECT id FROM channel WHERE parent_id=rootId; 
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
   SET max_sp_recursion_depth=12; 
   
   INSERT INTO tmpLst VALUES (NULL,rootId,nDepth); 
   
   OPEN cur1; 
   
   FETCH cur1 INTO b; 
   WHILE done=0 DO 
       CALL createChildLst(b,nDepth+1); 
       FETCH cur1 INTO b; 
   END WHILE; 
   
   CLOSE cur1; 
   END$$ 
 
 
-- 從某節(jié)點向上追溯根節(jié)點 
-- 遞歸生成臨時表數(shù)據(jù) 
DROP PROCEDURE IF EXISTS `createParentLst`$$ 
 
CREATE PROCEDURE `createParentLst`(IN rootId INT,IN nDepth INT) 
BEGIN 
   DECLARE done INT DEFAULT 0; 
   DECLARE b INT; 
   DECLARE cur1 CURSOR FOR SELECT parent_id FROM channel WHERE id=rootId; 
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
   SET max_sp_recursion_depth=12; 
   
   INSERT INTO tmpLst VALUES (NULL,rootId,nDepth); 
   
   OPEN cur1; 
   
   FETCH cur1 INTO b; 
   WHILE done=0 DO 
       CALL createParentLst(b,nDepth+1); 
       FETCH cur1 INTO b; 
   END WHILE; 
   
   CLOSE cur1; 
   END$$ 
 
 
-- 實現(xiàn)類似Oracle SYS_CONNECT_BY_PATH的功能 
-- 遞歸過程輸出某節(jié)點id路徑 
DROP PROCEDURE IF EXISTS `createPathLst`$$ 
 
CREATE PROCEDURE `createPathLst`(IN nid INT,IN delimit VARCHAR(10),INOUT pathstr VARCHAR(1000)) 
BEGIN          
   DECLARE done INT DEFAULT 0; 
   DECLARE parentid INT DEFAULT 0;    
   DECLARE cur1 CURSOR FOR  
   SELECT t.parent_id,CONCAT(CAST(t.parent_id AS CHAR),delimit,pathstr) 
    FROM channel AS t WHERE t.id = nid; 
     
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
   SET max_sp_recursion_depth=12;          
   
   OPEN cur1; 
   
   FETCH cur1 INTO parentid,pathstr; 
   WHILE done=0 DO       
       CALL createPathLst(parentid,delimit,pathstr); 
       FETCH cur1 INTO parentid,pathstr; 
   END WHILE; 
      
   CLOSE cur1;  
   END$$ 
 
 
-- 遞歸過程輸出某節(jié)點name路徑 
DROP PROCEDURE IF EXISTS `createPathnameLst`$$ 
 
CREATE PROCEDURE `createPathnameLst`(IN nid INT,IN delimit VARCHAR(10),INOUT pathstr VARCHAR(1000)) 
BEGIN          
   DECLARE done INT DEFAULT 0; 
   DECLARE parentid INT DEFAULT 0;    
   DECLARE cur1 CURSOR FOR  
   SELECT t.parent_id,CONCAT(t.cname,delimit,pathstr) 
    FROM channel AS t WHERE t.id = nid; 
     
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
   SET max_sp_recursion_depth=12;          
   
   OPEN cur1; 
   
   FETCH cur1 INTO parentid,pathstr; 
   WHILE done=0 DO       
       CALL createPathnameLst(parentid,delimit,pathstr); 
       FETCH cur1 INTO parentid,pathstr; 
   END WHILE; 
      
   CLOSE cur1;  
   END$$ 
 
 
-- 調(diào)用函數(shù)輸出id路徑 
DROP FUNCTION IF EXISTS `fn_tree_path`$$ 
 
CREATE FUNCTION `fn_tree_path`(nid INT,delimit VARCHAR(10)) RETURNS VARCHAR(2000) CHARSET utf8 
BEGIN  
 DECLARE pathid VARCHAR(1000); 
  
 SET @pathid=CAST(nid AS CHAR); 
 CALL createPathLst(nid,delimit,@pathid); 
  
 RETURN @pathid; 
END$$ 
 
 
-- 調(diào)用函數(shù)輸出name路徑 
DROP FUNCTION IF EXISTS `fn_tree_pathname`$$ 
 
CREATE FUNCTION `fn_tree_pathname`(nid INT,delimit VARCHAR(10)) RETURNS VARCHAR(2000) CHARSET utf8 
BEGIN  
 DECLARE pathid VARCHAR(1000); 
  
 SET @pathid='';   
 CALL createPathnameLst(nid,delimit,@pathid); 
  
 RETURN @pathid; 
END$$ 
 
 
-- 調(diào)用過程輸出子節(jié)點 
DROP PROCEDURE IF EXISTS `showChildLst`$$ 
 
CREATE PROCEDURE `showChildLst`(IN rootId INT) 
BEGIN 
   DROP TEMPORARY TABLE IF EXISTS tmpLst; 
   CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst  
    (sno INT PRIMARY KEY AUTO_INCREMENT,id INT,depth INT);    
   
   CALL createChildLst(rootId,0); 
   
   SELECT channel.id,CONCAT(SPACE(tmpLst.depth*2),'--',channel.cname) NAME,channel.parent_id,tmpLst.depth,fn_tree_path(channel.id,'/') path,fn_tree_pathname(channel.id,'/') pathname 
   FROM tmpLst,channel WHERE tmpLst.id=channel.id ORDER BY tmpLst.sno; 
   END$$ 
 
-- 調(diào)用過程輸出父節(jié)點 
DROP PROCEDURE IF EXISTS `showParentLst`$$ 
 
CREATE PROCEDURE `showParentLst`(IN rootId INT) 
BEGIN 
   DROP TEMPORARY TABLE IF EXISTS tmpLst; 
   CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst  
    (sno INT PRIMARY KEY AUTO_INCREMENT,id INT,depth INT);    
   
   CALL createParentLst(rootId,0); 
   
   SELECT channel.id,CONCAT(SPACE(tmpLst.depth*2),'--',channel.cname) NAME,channel.parent_id,tmpLst.depth,fn_tree_path(channel.id,'/') path,fn_tree_pathname(channel.id,'/') pathname 
   FROM tmpLst,channel WHERE tmpLst.id=channel.id ORDER BY tmpLst.sno; 
   END$$ 
 
 
DELIMITER ; 

三、測試


CALL showChildLst(-1); 
CALL showChildLst(13); 
CALL showChildLst(14); 
CALL showChildLst(17); 
CALL showChildLst(18); 
 
CALL showParentLst(-1); 
CALL showParentLst(13); 
CALL showParentLst(14); 
CALL showParentLst(17); 
CALL showParentLst(18); 

四、遺留問題

1. 因為mysql對動態(tài)游標(biāo)的支持不夠,所以要想做成通用的過程或函數(shù)比較困難,可以利用兩個臨時表來轉(zhuǎn)換(同時去掉了遞歸調(diào)用)是個相對通用的實現(xiàn)。

2. 目前來看無論哪種實現(xiàn),效率都不太好,希望mysql自己能實現(xiàn)Oracle 的connect by 功能,應(yīng)該會比較優(yōu)化。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • 在Mysql數(shù)據(jù)庫里通過存儲過程實現(xiàn)樹形的遍歷
  • mysql存儲過程詳解
  • mysql存儲過程 游標(biāo) 循環(huán)使用介紹
  • MySQL存儲過程使用實例詳解
  • MySQL存儲過程例子(包含事務(wù),輸出參數(shù),嵌套調(diào)用)
  • MySql存儲過程與函數(shù)詳解
  • mysql存儲過程基礎(chǔ)之遍歷多表記錄后插入第三方表中詳解

標(biāo)簽:天津 臨沂 成都 內(nèi)蒙古 常德 貴州 湖州 重慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL 實現(xiàn)樹的遍歷詳解及簡單實現(xiàn)示例》,本文關(guān)鍵詞  MySQL,實現(xiàn),樹,的,遍歷,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL 實現(xiàn)樹的遍歷詳解及簡單實現(xiàn)示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL 實現(xiàn)樹的遍歷詳解及簡單實現(xiàn)示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产毛片在线视频| 91超碰在线免费观看| 国产精品 欧美激情| 精品视频全国免费看| 久色视频在线播放| 日韩美女精品在线| 成人综合av网| 无码国精品一区二区免费蜜桃| 精品国产一区二区在线| 欧美一区二区激情视频| 日韩精品在线第一页| 日本成人免费在线观看| 日韩一卡二卡三卡四卡| 免费高清视频在线观看| 亚洲午夜在线视频| 少妇一级淫免费播放| 亚洲欧美在线aaa| 日韩av一级大片| 青青草成人在线观看| 欧美夫妻性生活视频| 任我爽在线视频| 亚洲区中文字幕| 国产又粗又长又黄的视频| 欧美精品xxxxbbbb| 91av在线免费| 亚洲精品福利资源站| 午夜精品一区二区三区视频| 亚洲奶大毛多的老太婆| 国产精品视频看看| 久久久999成人| 国产视频1区2区| 日韩av免费在线看| 欧美熟女一区二区| 久久亚洲一区二区| 91亚洲精品久久久蜜桃| 青青青国产在线视频| 在线中文字幕不卡| 91麻豆精品成人一区二区| 欧美美女15p| 蜜臀av性久久久久av蜜臀妖精| 国产伦视频一区二区三区| 91在线你懂得| 少妇性l交大片| 欧美三级三级三级| 欧美色视频一区二区三区在线观看| 亚洲第一页中文字幕| 无码人妻精品一区二区三区9厂| 91精品久久久久久久久久另类| 成人aaaa免费全部观看| 精品99在线视频| 欧美伊人久久久久久久久影院| 三上悠亚ssⅰn939无码播放 | 99久久伊人精品影院| 中文字幕巨乱亚洲| xxxx视频在线观看| 色婷婷综合成人| 国产又大又黑又粗| 香蕉久久免费影视| 欧美成人伊人久久综合网| 特黄视频免费看| 日韩福利在线| 欧美亚洲尤物久久| 日本中文字幕免费| 亚洲xxx大片| 一区二区三区欧美日| 国产午夜精品无码| 成人免费视频网站入口| 亚洲一区在线播放| 久久精品人妻一区二区三区| 亚洲综合中文字幕在线| 国产精品毛片a∨一区二区三区| 国产黄色片在线| 91热福利电影| 亚洲精品成人在线| 久久网中文字幕| 好吊色欧美一区二区三区视频| 亚洲精品国久久99热| 日韩欧美一级大片| 亚洲人成网站777色婷婷| 成年人视频在线免费看| 在线观看成人av电影| 亚洲精品久久久久久下一站| 蜜桃视频在线观看一区| 手机免费看av网站| 日本久久久久久久久久久| 最新国产成人在线观看| 亚洲影院在线播放| 丰满的少妇愉情hd高清果冻传媒 | 日韩国产欧美在线视频| 一级少妇精品久久久久久久| 亚洲一区二区三区乱码aⅴ| 欧美视频二区36p| 成人毛片视频免费看| 中文字幕第38页| 国产精品亚洲综合天堂夜夜| 欧美不卡在线视频| 国产69精品久久777的优势| 91免费在线看片| 中文精品视频一区二区在线观看| 在线播放精品一区二区三区 | 精品国偷自产在线| 日韩理论片中文av| 国产精品久久免费| 韩国三级hd两男一女| 国产精品91免费在线| 欧美视频一区二区三区在线观看| 国产在线播放一区| 欧美黄色aaa| 黄色国产小视频| 成人黄色在线免费| 精品亚洲aⅴ在线观看| 99国产精品国产精品毛片| 日韩少妇裸体做爰视频| 亚洲一二三不卡| 日韩精品久久久毛片一区二区| 视频一区视频二区国产精品| 亚洲天天做日日做天天谢日日欢 | 99在线高清视频在线播放| 亚洲精品日韩欧美| 精品美女久久久久久免费| 国产成都精品91一区二区三| 91国内精品视频| 婷婷在线精品视频| wwwxxx色| 久久久久久久久久久免费视频| 国精产品99永久一区一区| 欧美日韩高清区| 亚洲男人天堂2019| 在线91免费看| 动漫精品一区二区| ...xxx性欧美| www国产成人| 国产精品1区2区3区在线观看| www.国产视频| 在线播放精品视频| 国产污污视频在线观看 | 久久精品视频网站| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩国产精品一区二区不卡中文| www精品美女久久久tv| 亚洲国产另类精品专区| 日本一区二区三区免费视频| 性猛交娇小69hd| 亚洲熟妇国产熟妇肥婆| 韩国成人av| 久久久久日韩精品久久久男男| 日韩欧美电影一二三| 色综合天天综合| 一二三区精品视频| 不卡的av在线| 污污网站在线免费观看| 自拍偷拍18p| www日韩精品| 欧美极品aaaaabbbbb| 麻豆精品免费视频| 久久久久无码精品| 99sesese| 亚洲无在线观看| 伊人国产在线视频| 密臀av一区二区三区| 永久免费看av| 免费看毛片的网址| 欧美日韩成人免费视频| 精品人妻大屁股白浆无码| 91看片淫黄大片91| 91成人综合网| 国产欧美在线一区| 一二三级黄色片| 日本黄色一级网站| 亚洲一区二区三区四区av| 免费观看黄网站| 男人的天堂av网站| 日本aⅴ精品一区二区三区| 久久在线视频精品| 久久国产精品影院| 亚洲国产精品成人综合久久久| 青青草原成人网| 日韩欧美国产综合在线| 草草草在线视频| 亚洲18在线看污www麻豆| 黄色性视频网站| 国产精品300页| 国产精品白丝喷水在线观看| 中文字幕在线观看视频网站| 亚洲精品国产精品乱码视色| 蜜臀久久精品久久久用户群体| 欧美成人aaaaⅴ片在线看| 国内老熟妇对白hdxxxx| 国产一区二区在线观看免费| 久久久一区二区三区| 亚洲女性喷水在线观看一区| 91久久线看在观草草青青| 亚洲精品国精品久久99热一| 在线看国产精品| 97在线免费视频| 国产精品久久久久久久久久久久午夜片| 日产精品高清视频免费| 日本成人黄色网| 91精品人妻一区二区三区蜜桃欧美 | 亚洲欧美一区二区三区在线观看 | 国产精品短视频| 91在线在线观看| 亚洲欧美强伦一区二区| 欧亚精品在线观看| 国产免费一区二区三区免费视频| 亚洲成人av资源| 欧美精品日韩www.p站| 国语精品免费视频| 欧美日韩大尺度| 久久精品男女| 亚洲综合一区二区| 亚洲视频在线播放| 精品一区二区三区视频日产| 日韩精品久久久久久免费| 色综合久久综合中文综合网| 91老司机在线| 精品人妻一区二区三区日产乱码卜| 日本精品视频一区二区三区| 天天摸日日摸狠狠添| 91国内精品视频| 一本大道av伊人久久综合| 国产精品亚洲第一区| 30一40一50老女人毛片| av中文字幕在线不卡| 精品一区精品二区| 欧美一级中文字幕| 亚欧视频在线观看| 精品在线观看视频| 欧美午夜精品理论片a级按摩| 国内成人精品视频| 青娱乐国产91| 日本50路肥熟bbw| 精品欧美在线观看| 亚洲最新视频在线观看| 久久久电影免费观看完整版| 国产一区二区精品免费| 一本色道综合久久欧美日韩精品| www香蕉视频| 亚洲欧洲日韩在线| 欧美va亚洲va香蕉在线| 成人www视频在线观看| 亚洲 国产 图片| 蜜桃视频污在线观看| 欧美日韩中文字幕精品| 91久久伊人青青碰碰婷婷| 亚洲欧美日韩一二三区| 午夜免费福利视频| 欧美综合天天夜夜久久| 国产综合18久久久久久| 国产性生活大片| 欧美极品另类videosde| 久久香蕉频线观| 欧美大尺度做爰床戏| 久久99热狠狠色一区二区| 亚洲精品国精品久久99热| 日韩电影天堂视频一区二区| 四虎成人精品永久免费av| 日韩理论片中文av| 国内精久久久久久久久久人| 在线播放av中文字幕| 日韩精品一二区| 色哟哟入口国产精品| 日本999视频| 午夜av免费在线观看| 国产丝袜一区视频在线观看| 999精品网站| 国产综合色产在线精品| 日韩在线精品视频| 中国黄色片一级| 国产成人啪午夜精品网站男同| 亚洲18私人小影院| 日韩高清国产精品| 国产成人精品亚洲精品色欲| 精品久久久久久无| 丁香婷婷激情网| 国产一区二区成人久久免费影院 | 国产成人亚洲综合a∨猫咪| 欧美激情视频在线| 久操视频免费看| 亚洲综合丁香婷婷六月香| 欧美久久久久久| 十八禁一区二区三区| 久久久精品亚洲| 精品人伦一区二区三电影| 亚洲欧美自拍偷拍色图| 国产伦精品一区二区三区视频免费 | 午夜精产品一区二区在线观看的| 亚洲午夜在线观看视频在线| 一级一片免费播放| 国内成人自拍视频| 欧美在线视频a| 一级性生活免费视频| 色诱视频网站一区| 久热免费在线观看| 中文幕一区二区三区久久蜜桃| 国产精品初高中精品久久| 国产精品久久久久久在线| 欧美成人免费大片| 中日韩黄色大片| 亚洲网站在线观看| 欧美性x x x| 亚洲国产精品热久久| 久久久久亚洲av片无码v| 国产三级一区二区三区| 亚洲精品免费在线看| 成人免费观看视频| 欧美精品亚洲精品| 国产.欧美.日韩| 日本福利视频导航| 丁香桃色午夜亚洲一区二区三区| 成人av免费看| 蜜臀精品久久久久久蜜臀| 欧美在线不卡区| 精品国产无码AV| 91精品国产综合久久香蕉| 午夜视频免费看| 亚洲aⅴ男人的天堂在线观看 | 中文字幕另类日韩欧美亚洲嫩草| 亚洲系列中文字幕| 日本视频www| 91精品国产高清久久久久久91| 五月婷婷六月婷婷| 久久久免费精品| 97成人免费视频| 97精品免费视频| 精品人妻一区二区三区麻豆91| 2022国产精品| 日韩av一级电影| 国产成人女人毛片视频在线| 成人免费视频视频在线观看免费 | 一本久久精品一区二区| 大地资源二中文在线影视观看| 久久国产天堂福利天堂| 日本国产在线观看| 欧美日韩一区二区三区在线视频| 国产欧美精品日韩区二区麻豆天美| 久久人人爽人人爽人人av| 亚洲影院在线观看| 免费污网站在线观看| 日韩中文字幕在线| 国产女18毛片多18精品| 欧美黄色高清视频| 国产成人精品免费视频网站| 奇米影视亚洲色图| 日韩一区二区三区观看| 在线观看中文字幕av| 成人黄色免费看| 国产日韩欧美综合一区| 中日韩一级黄色片| 国产在线精品一区二区中文| 亚洲国产wwwccc36天堂| 亚洲经典一区二区| 亚洲一级免费观看| 久久久亚洲福利精品午夜| 国产日产欧美一区| 成人涩涩小片视频日本| 一区二区三区av| 中文字幕不卡在线视频极品| 国产麻豆9l精品三级站| 免费无码av片在线观看| 久久色在线播放| 亚洲三级久久久| 在线亚洲美日韩| 欧美日韩亚洲综合在线| 免费看污视频的网站| 日韩欧美色综合网站| 亚洲男女视频在线观看| 看av免费毛片手机播放| 精品国产欧美一区二区三区成人| 亚洲影视在线播放| 污污网站免费在线观看| 欧美日韩人妻精品一区二区三区| 国产黄页在线观看| 97欧洲一区二区精品免费| 日韩av在线网| 久久精品亚洲精品国产欧美| 中文字幕人妻丝袜乱一区三区 | 国产精品美女在线| 日韩欧美成人区| 国产在线视频一区二区| 永久免费看片直接| 神马午夜伦理影院| 国产欧美日韩丝袜精品一区| 91精品欧美福利在线观看| 久久你懂得1024| 成人午夜精品视频| 久久精品亚洲天堂| 成人性生交大片免费观看嘿嘿视频| 丝袜亚洲另类欧美重口| 精品免费国产二区三区| 亚洲动漫第一页| 国产精品乱码一区二区三区软件| 成人av免费网站| 国产69精品久久777的优势| 亚洲黄色小说网址| 波多野结衣午夜| 日韩av片在线播放| 亚洲综合20p| 亚洲电影免费| 91美女片黄在线观| 亚洲精品理论电影| 亚洲视频1区2区| 精品一区二区三区蜜桃| 国产这里有精品| 手机视频在线观看| 一道本在线观看视频| 午夜精品福利视频| 日韩视频永久免费| 日韩美女视频一区| 亚洲色图21p|