php处理⼤批量数据,php⼤量数据⼊库怎么处理
有业务需求需要⼀次性循环n条数据,插⼊或更新数据库时,如果单纯的循环,插⼊/更新,会消耗太多的数据库资源
以下是⼀种简单的解决⽅案
数据库的insert是可以批量更新的,当有⼤量数据循环insert时,可以将数据先保留不执⾏插⼊命令,到最后⼀条时⼀次性插⼊,例如tp的addAll()⽅法; (推荐学习:PHP视频教程)
数据库的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语句⼤概意思就是这样了,批量更新实现⽐较⿇烦⼀点,就不发了,以下是批量更新的sql执⾏语句UPDAT
E 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 )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。