最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL通過自定義函數(shù)實現(xiàn)遞歸查詢父級ID或者子級ID

 更新時間:2019年11月27日 09:38:48   作者:楓葉思源  
這篇文章主要介紹了MySQL通過自定義函數(shù)實現(xiàn)遞歸查詢父級ID或者子級ID,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

背 景:

在MySQL中如果是有限的層次,比如我們事先如果可以確定這個樹的最大深度, 那么所有節(jié)點為根的樹的深度均不會超過樹的最大深度,則我們可以直接通過left join來實現(xiàn)。

但很多時候我們是無法控制或者是知道樹的深度的。這時就需要在MySQL中用存儲過程(函數(shù))來實現(xiàn)或者在程序中使用遞歸來實現(xiàn)。本文討論在MySQL中使用函數(shù)來實現(xiàn)的方法:

一、環(huán)境準(zhǔn)備

1、建表

CREATE TABLE `table_name` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `status` int(255) NULL DEFAULT NULL,
 `pid` int(11) NULL DEFAULT NULL,
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2、插入數(shù)據(jù)

INSERT INTO `table_name` VALUES (1, 12, 0);
INSERT INTO `table_name` VALUES (2, 4, 1);
INSERT INTO `table_name` VALUES (3, 8, 2);
INSERT INTO `table_name` VALUES (4, 16, 3);
INSERT INTO `table_name` VALUES (5, 32, 3);
INSERT INTO `table_name` VALUES (6, 64, 3);
INSERT INTO `table_name` VALUES (7, 128, 6);
INSERT INTO `table_name` VALUES (8, 256, 7);
INSERT INTO `table_name` VALUES (9, 512, 8);
INSERT INTO `table_name` VALUES (10, 1024, 9);
INSERT INTO `table_name` VALUES (11, 2048, 10);

二、MySQL函數(shù)的編寫

1、查詢當(dāng)前節(jié)點的所有父級節(jié)點

delimiter // 
CREATE FUNCTION `getParentList`(root_id BIGINT) 
   RETURNS VARCHAR(1000) 
   BEGIN 
     DECLARE k INT DEFAULT 0;
     DECLARE fid INT DEFAULT 1;
     DECLARE str VARCHAR(1000) DEFAULT '$';
     WHILE rootId > 0 DO
       SET fid=(SELECT pid FROM table_name WHERE root_id=id); 
       IF fid > 0 THEN
         SET str = concat(str,',',fid);  
         SET root_id = fid; 
       ELSE 
         SET root_id=fid; 
       END IF; 
   END WHILE;
   RETURN str;
 END //
 delimiter ;

2、查詢當(dāng)前節(jié)點的所有子節(jié)點

delimiter //
CREATE FUNCTION `getChildList`(root_id BIGINT) 
  RETURNS VARCHAR(1000) 
  BEGIN 
   DECLARE str VARCHAR(1000) ; 
   DECLARE cid VARCHAR(1000) ; 
   DECLARE k INT DEFAULT 0;
   SET str = '$'; 
   SET cid = CAST(root_id AS CHAR);12    WHILE cid IS NOT NULL DO 
        IF k > 0 THEN
         SET str = CONCAT(str,',',cid);
        END IF;
        SELECT GROUP_CONCAT(id) INTO cid FROM table_name WHERE FIND_IN_SET(pid,cid)>0;
        SET k = k + 1;
   END WHILE; 
   RETURN str; 
END // 
delimiter ;

三、測試

1、獲取當(dāng)前節(jié)點的所有父級

SELECT getParentList(10);

2、獲取當(dāng)前節(jié)點的所有字節(jié)

SELECT getChildList(3);

總結(jié)

以上所述是小編給大家介紹的MySQL通過自定義函數(shù)實現(xiàn)遞歸查詢父級ID或者子級ID,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程

    MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程

    這篇文章主要介紹了MySQL中查詢?nèi)罩九c慢查詢?nèi)罩镜幕緦W(xué)習(xí)教程,文中還提到了MySQL自帶的Mysqldumpslow日志分析工具的使用,需要的朋友可以參考下
    2015-12-12
  • MySQL約束和事務(wù)知識點詳細(xì)歸納

    MySQL約束和事務(wù)知識點詳細(xì)歸納

    在關(guān)系型數(shù)據(jù)庫中,事務(wù)的重要性不言而喻,只要對數(shù)據(jù)庫稍有了解的人都知道事務(wù),下面這篇文章主要給大家介紹了關(guān)于MySQL約束和事務(wù)知識點歸納的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • MySQL prepare語句的SQL語法

    MySQL prepare語句的SQL語法

    PREPARE語句用于預(yù)備一個語句,并指定名稱statement_name,以后引用該語句
    2012-01-01
  • MySql like模糊查詢通配符使用詳細(xì)介紹

    MySql like模糊查詢通配符使用詳細(xì)介紹

    MySQL提供標(biāo)準(zhǔn)的SQL模式匹配,以及一種基于象Unix實用程序如vi、grep和sed的擴展正則表達式模式匹配的格式
    2013-10-10
  • mysql用戶創(chuàng)建與授權(quán)的簡單實例

    mysql用戶創(chuàng)建與授權(quán)的簡單實例

    MySQL等主流數(shù)據(jù)庫的最高權(quán)限一般是root用戶,有時我們需要提供數(shù)據(jù)庫的賬號和密碼以使用某些服務(wù),下面這篇文章主要給大家介紹了關(guān)于mysql用戶創(chuàng)建與授權(quán)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • MySQL5.7.14下載安裝圖文教程及MySQL數(shù)據(jù)庫語句入門大全

    MySQL5.7.14下載安裝圖文教程及MySQL數(shù)據(jù)庫語句入門大全

    這篇文章主要介紹了MySQL5.7.14下載安裝詳細(xì)教程及MySQL數(shù)據(jù)庫語句入門大全的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • MySQL命令無法輸入中文問題的解決方式

    MySQL命令無法輸入中文問題的解決方式

    這篇文章主要給大家介紹了關(guān)于MySQL命令無法輸入中文問題的解決方式,文中給出了詳細(xì)的解決方案,對遇到這個問題的同學(xué)有很大的幫助,需要的朋友可以參考下
    2021-08-08
  • MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    本文主要介紹了MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Linux中查看MySQL服務(wù)是否開啟方式

    Linux中查看MySQL服務(wù)是否開啟方式

    這篇文章主要介紹了Linux中查看MySQL服務(wù)是否開啟方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 詳解MySQL安裝及MySQL8.0新密碼認(rèn)證方式

    詳解MySQL安裝及MySQL8.0新密碼認(rèn)證方式

    這篇文章主要介紹了詳解MySQL安裝及MySQL8.0新密碼認(rèn)證方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

桐柏县| 时尚| 阿合奇县| 闻喜县| 广汉市| 疏附县| 探索| 永登县| 古田县| 霍邱县| 黔江区| 馆陶县| 巴塘县| 台南县| 罗甸县| 朝阳县| 车险| 登封市| 渝北区| 尼木县| 阳曲县| 灵山县| 大英县| 九寨沟县| 边坝县| 离岛区| 蛟河市| 湘潭市| 全椒县| 江门市| 井研县| 广丰县| 福泉市| 铜梁县| 安阳县| 贵定县| 甘孜县| 漳浦县| 横山县| 锡林郭勒盟| 曲阜市|