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

MySQL實現(xiàn)類似于connect_by_isleaf的功能MySQL方法或存儲過程

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

最近有個特別變態(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多萬行記錄,每個pid記錄的這個ID的最頂級分類,tid是它的上級分類!
現(xiàn)在需求是:通過指定一個ID,查找出它的所有子集成員,并修改這個pid的值為新指定的值??!
在PHP中跑了一下,執(zhí)行時間大概需要50秒+,很是痛苦?。?!
需要遞歸找出所有子集,修改它的pid,工作量還是蠻大的。

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

所以用這兒簡單的寫寫用MySQL的方法或存儲過程實現(xiàn)的經(jīng)驗

第一種: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);

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

Data too long for column 'sTemp' at row 1

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

第二種:存儲過程+中間表

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萬數(shù)據(jù)也卡成球了~~~

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

相關(guān)文章

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

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

    最近遇到一個需求是將SQL Server轉(zhuǎn)換為 MySQL的格式,由于不想在本地安裝 SQL Server,所以決定在遠程的 Windows 服務(wù)器上安裝,并在本地使用Navicat遠程連接它,然而在實現(xiàn)過程中遇到了諸多問題,記錄于此。感興趣的朋友們下面來一起學(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的教程詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • 安裝配置mysql及Navicat prenium的詳細流程

    安裝配置mysql及Navicat prenium的詳細流程

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

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

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

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

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

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

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

    綠色版 mysql 安裝配置

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

    關(guān)于MySQL的時間進位問題淺析

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

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

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

最新評論

乡城县| 奉化市| 武胜县| 长沙县| 二连浩特市| 澎湖县| 建阳市| 贵定县| 屏南县| 观塘区| 清徐县| 正阳县| 宁晋县| 句容市| 隆安县| 来宾市| 房产| 密山市| 农安县| 莱阳市| 贺州市| 城口县| 红安县| 五华县| 新建县| 广灵县| 灵武市| 那坡县| 宁波市| 邢台市| 隆子县| 泸西县| 荔浦县| 镇平县| 兴隆县| 丘北县| 开封市| 龙泉市| 泾阳县| 天台县| 武宣县|