mysql用php怎麼分批處理插入?比如前1000條資料處理結束後,再處理1001至2000條,然後再處理2001至3000條……,直到全部處理完畢?

來源:互聯網
上載者:User
當表 member中資料量不大時,可以一次性執行:

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}


但當member中資料量達到百萬條時,說會出現執行逾時的錯誤:
Fatal error: Maximum execution time of 30 seconds exceeded in D:

那麼怎麼現實分批處理呢,比如前1000條資料處理結束後,再處理1001至2000條,然後再處理2001至3000條……,直到全部處理完畢?

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){$i++;$ep=1000;//這裡假設處理完第1個1000條後再處理第二個1000條,直至處理結束?   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}



請高手幫寫出詳細代碼,謝謝!因程式碼後置在後台執行,所以不要考慮用分頁一頁一頁手工去點的方式


回複討論(解決方案)

可以用 insert into mingxi (mid,mccd,mtime) select id, cca+ccb, time from member

最近處理一些資料 大約56萬條,包括每條的讀取 計算 處理 和插入

使用一個ajax方法去請求PHP頁面,調一個尚未被處理的進行處理,完畢後打上已處理的標記存庫,返回到js, ajax接收到返回以後(可以先輸出到頁面上)調用自身,再次發起請求

56萬條跑了大約10萬秒, 頁面和程式沒死過

雖然很慢,但這跟我的需求(需要把每條資料進行分析處理)有關 而且不會逾時什麼的.

最近處理一些資料 大約56萬條,包括每條的讀取 計算 處理 和插入

使用一個ajax方法去請求PHP頁面,調一個尚未被處理的進行處理,完畢後打上已處理的標記存庫,返回到js, ajax接收到返回以後(可以先輸出到頁面上)調用自身,再次發起請求

56萬條跑了大約10萬秒, 頁面和程式沒死過

雖然很慢,但這跟我的需求(需要把每條資料進行分析處理)有關 而且不會逾時什麼的.



這種方法沒法試用非同步, 處理完畢的傳回值有可能先行返回, 除非是查詢一條然後提交一條的方式. 否則有可能會造成資料丟失.
當然如果1天跑完 你兩天都沒關 應該是沒太大問題.


最近處理一些資料 大約56萬條,包括每條的讀取 計算 處理 和插入

使用一個ajax方法去請求PHP頁面,調一個尚未被處理的進行處理,完畢後打上已處理的標記存庫,返回到js, ajax接收到返回以後(可以先輸出到頁面上)調用自身,再次發起請求

56萬條跑了大約10萬秒, 頁面和程式沒死過

雖然很慢,但這跟我的需求(需要把每條資料進行分析處理)有關 而且不會逾時什麼的.



這種方法沒法試用非同步, 處理完畢的傳回值有可能先行返回, 除非是查詢一條然後提交一條的方式. 否則有可能會造成資料丟失.
當然如果1天跑完 你兩天都沒關 應該是沒太大問題.



為何會先行返回? 沒看明白能否舉個例子說明下

$offs = isset($_GET['offs']) ? $_GET['offs'] : 1;$sql = "select * from member limit $offs, 1000";//做你該做的事header("Location: $_SERVER[PHP_SELF]?offs=" . ($offs+1000));

$offs = isset($_GET['offs']) ? $_GET['offs'] : 1;$sql = "select * from member limit $offs, 1000";//做你該做的事header("Location: $_SERVER[PHP_SELF]?offs=" . ($offs+1000));



放在哪裡呢?你這個是不是等於不斷重新整理頁面啊?頁面中還有一些其它代碼,這個頁面只能執行一次,謝謝

同問 有解決嗎

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.