您好,登錄后才能下訂單哦!
php大量數據入庫的處理方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
有業務需求需要一次性循環n條數據,插入或更新數據庫時,如果單純的循環,插入/更新,會消耗太多的數據庫資源
以下是一種簡單的解決方案
數據庫的insert是可以批量更新的,當有大量數據循環insert時,可以將數據先保留不執行插入命令,到最后一條時一次性插入,例如tp的addAll()方法;
數據庫的update 如果使用case when 的話,也是可以批量更新的。
本文主要講關于批量insert;
生成一個訂單
正常情況的語句為:
INSERT INTO order (`goods_id`,`num`,`price`) VALUES (1,1,'10.00'); //封裝成函數 function add_order($goods_id,$num,$price){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); }
假設有一個用戶,一次性將購物車的1000個商品結算成訂單,生成1000個訂單時;
for ($i=0;$i<1000;$i++){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); } //這樣的話會導致服務器資源占用過大,網站卡死 //所以,我們可以 $sql = "INSERT INTO order (`goods_id`,`num`,`price`) VALUES "; for ($i=0;$i<1000;$i++){ if($i==0){ $sql.="($goods_id,$num,$price)"; }else{ $sql.=",($goods_id,$num,$price)"; } } $db->query($sql);
大概意思就是這樣了,批量更新實現比較麻煩一點,就不發了,以下是批量更新的sql執行語句
UPDATE tiyan.dm_user_cupboard SET `res_id` = CASE `id` WHEN 1041 THEN '1' WHEN 1058 THEN '1' WHEN 1055 THEN '1' END,`food_code` = CASE `id` WHEN 1041 THEN '68' WHEN 1058 THEN '47' WHEN 1055 THEN '49' END,`food_name` = CASE `id` WHEN 1041 THEN '紅棗' WHEN 1058 THEN '蓮藕' WHEN 1055 THEN '洋蔥' END,`num` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '3' WHEN 1055 THEN '2' END,`level` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '2' WHEN 1055 THEN '2' END,`update_time` = CASE `id` WHEN 1041 THEN '2017-12-09 21:40:06' WHEN 1058 THEN '2017-12-09 21:40:06' WHEN 1055 THEN '2017-12-09 21:40:06' END WHERE id IN ( 1041,1058,1055 )
感謝各位的閱讀!看完上述內容,你們對php大量數據入庫的處理方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。