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

MySQL實(shí)現(xiàn)類(lèi)似于connect_by_isleaf的功能MySQL方法或存儲(chǔ)過(guò)程

 更新時(shí)間:2017年02月05日 20:18:07   投稿:mdxy-dxy  
這篇文章主要介紹了MySQL實(shí)現(xiàn)類(lèi)似于connect_by_isleaf的功能MySQL方法或存儲(chǔ)過(guò)程,需要的朋友可以參考下

最近有個(gè)特別變態(tài)的業(yè)務(wù)需求,有一張表

CREATE TABLE `demo` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `tid` int(11) DEFAULT '0',
 `pid` int(11) DEFAULT '1',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3000124 DEFAULT CHARSET=utf8;

大概就是這樣,有300多萬(wàn)行記錄,每個(gè)pid記錄的這個(gè)ID的最頂級(jí)分類(lèi),tid是它的上級(jí)分類(lèi)!
現(xiàn)在需求是:通過(guò)指定一個(gè)ID,查找出它的所有子集成員,并修改這個(gè)pid的值為新指定的值??!
在PHP中跑了一下,執(zhí)行時(shí)間大概需要50秒+,很是痛苦?。?!
需要遞歸找出所有子集,修改它的pid,工作量還是蠻大的。

而oracle中有一個(gè)方法是connect_by_isleaf,可以很方便的找出所有子集,但我是MySQL......

所以用這兒簡(jiǎn)單的寫(xiě)寫(xiě)用MySQL的方法或存儲(chǔ)過(guò)程實(shí)現(xiàn)的經(jīng)驗(yàn)

第一種:MySQL的方法

CREATE DEFINER=`root`@`localhost` FUNCTION `lvtao_demo_a`(rootId int) RETURNS text CHARSET utf8
  READS SQL DATA
  COMMENT 'demo'
BEGIN

DECLARE sTemp text;
DECLARE sTempChd text;

SET sTempChd =cast(rootId as CHAR);
SET sTemp = '';

WHILE sTempChd is not null DO
  SET sTemp = concat(sTemp,',',sTempChd);
  SELECT group_concat(id) INTO sTempChd FROM demo where FIND_IN_SET(tid,sTempChd)>0;
END WHILE;

RETURN sTemp;

END;

使用方法就是

select lvtao_demo_a(5);

但我在測(cè)試的時(shí)候,300萬(wàn)的數(shù)據(jù)基本上就是崩潰?。?!

Data too long for column 'sTemp' at row 1

優(yōu)點(diǎn): 簡(jiǎn)單,方便,沒(méi)有遞歸調(diào)用層次深度的限制 (max_sp_recursion_depth,最大255) ;
缺點(diǎn):長(zhǎng)度受限。

第二種:存儲(chǔ)過(guò)程+中間表

DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sss`(IN pid int, IN rootid int)
BEGIN
   
DECLARE done INT DEFAULT FALSE;
DECLARE id TEXT;
DECLARE cur1 CURSOR FOR SELECT id FROM demo WHERE tid=pid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

set max_sp_recursion_depth = 200;
 
OPEN cur1;
  read_loop: LOOP
    FETCH cur1 INTO id;
    IF done THEN
      LEAVE read_loop;
    END IF;
    INSERT INTO temp (rootid,zid) values (rootid, id);
    call sss(id,rootid);
  END LOOP;
CLOSE cur1;

END;;
DELIMITER ;

哈哈,300萬(wàn)數(shù)據(jù)也卡成球了~~~

再想辦法吧~~~~不折騰了

相關(guān)文章

  • Navicat遠(yuǎn)程連接SQL Server并轉(zhuǎn)換成MySQL步驟詳解

    Navicat遠(yuǎn)程連接SQL Server并轉(zhuǎn)換成MySQL步驟詳解

    最近遇到一個(gè)需求是將SQL Server轉(zhuǎn)換為 MySQL的格式,由于不想在本地安裝 SQL Server,所以決定在遠(yuǎn)程的 Windows 服務(wù)器上安裝,并在本地使用Navicat遠(yuǎn)程連接它,然而在實(shí)現(xiàn)過(guò)程中遇到了諸多問(wèn)題,記錄于此。感興趣的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • window環(huán)境配置Mysql 5.7.21 windowx64.zip免安裝版教程詳解

    window環(huán)境配置Mysql 5.7.21 windowx64.zip免安裝版教程詳解

    這篇文章主要介紹了window環(huán)境配置Mysql 5.7.21 windowx64.zip免安裝版教程詳解,需要的朋友可以參考下
    2018-02-02
  • CentOS7.4 源碼安裝MySQL8.0的教程詳解

    CentOS7.4 源碼安裝MySQL8.0的教程詳解

    這篇文章主要介紹了CentOS7.4 源碼安裝MySQL8.0的教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • 安裝配置mysql及Navicat prenium的詳細(xì)流程

    安裝配置mysql及Navicat prenium的詳細(xì)流程

    這篇文章主要介紹了安裝配置mysql及Navicat Premium的詳細(xì)流程,配置方法也真的很簡(jiǎn)單,本文給大家詳細(xì)介紹mysql Navicat Premium安裝配置相關(guān)知識(shí)感興趣的朋友,一起學(xué)習(xí)吧
    2021-06-06
  • 關(guān)于JDBC與MySQL臨時(shí)表空間的深入解析

    關(guān)于JDBC與MySQL臨時(shí)表空間的深入解析

    這篇文章主要給大家介紹了關(guān)于JDBC與MySQL臨時(shí)表空間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Mysql8.0.22解壓版安裝教程(小白專用)

    Mysql8.0.22解壓版安裝教程(小白專用)

    這篇文章主要介紹了Mysql8.0.22解壓版安裝教程(小白專用),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL中union和union all區(qū)別

    MySQL中union和union all區(qū)別

    今天和大家聊一聊,面試中可能遇到的一個(gè)知識(shí)點(diǎn),就是union與union all的區(qū)別,具有一定的參考價(jià)值,對(duì)面試和知識(shí)總結(jié)有一定的幫助,感興趣的可以了解一下
    2023-08-08
  • 綠色版 mysql 安裝配置

    綠色版 mysql 安裝配置

    好多朋友對(duì)于mysql的配置不是很清楚,其實(shí)最新本的配置也是這樣的,建議大家到s.jb51.net去下載一些服務(wù)器軟件。
    2009-06-06
  • 關(guān)于MySQL的時(shí)間進(jìn)位問(wèn)題淺析

    關(guān)于MySQL的時(shí)間進(jìn)位問(wèn)題淺析

    這篇文章主要給大家介紹了關(guān)于MySQL的時(shí)間進(jìn)位問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • CentOS7環(huán)境下安裝MySQL5.5數(shù)據(jù)庫(kù)

    CentOS7環(huán)境下安裝MySQL5.5數(shù)據(jù)庫(kù)

    大家好,本篇文章主要講的是CentOS7環(huán)境下安裝MySQL5.5數(shù)據(jù)庫(kù),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論

涿鹿县| 巫溪县| 柳州市| 罗城| 阿尔山市| 阿巴嘎旗| 屯昌县| 黄冈市| 鲁甸县| 阳泉市| 方山县| 泗水县| 三江| 昌宁县| 大宁县| 合阳县| 东阳市| 晴隆县| 尚义县| 新郑市| 苗栗县| 昌黎县| 丹阳市| 皋兰县| 沙河市| 台中市| 嘉定区| 新巴尔虎右旗| 论坛| 育儿| 子洲县| 盐津县| 西藏| 开化县| 台北县| 静安区| 北辰区| 高密市| 辉南县| 修文县| 治多县|