数据库数据批量插入

数据插入的方法我们都知道直接写成一条语句比较快,但是如果我们想实现每多少条插入一次数据,要用到一点小小的算法
场景:每三条数据插入一次,比如此处有11条数据。会余两条腰处理
1.每次遍历将数组存入一个新的数组。
2.处理九条数据。
3.在9条数据处理的if语句里,如果有三条数据,就做一次插入,并置空新数组。
4.处理9条数据之外的数据。如果键等于最大的键,则插入那个数组

// 这种处理方式有点偏差 但是结果是一样的
$arr = [0,1,2,3,4,5,6,7,8,9,10];
$num = 3;
$count = floor(count($arr)/$num)*$num; //取分割点的整数 此处是9
$countNum = count($arr)-1; //10
foreach ($arr as $key => $data){
    $newArray[] =array('name'=>$data);
    if($key<=$count ) {
        if ($key % $num == 0) {
            DB::table('test')->insert($newArray);
//                    插入数据后要置空数组
            $newArray = array();
        }
    }else {
        if ($key==$countNum){
             DB::table('test')->insert($newArray);
        }
    }
}

sql语句

  • 如果要本文所写的结果 应该以下代码
$arr = [0,1,2,3,4,5,6,7,8,9,10];
$num = 3;
$count = floor(count($arr)/$num)*$num; //取五百的整数
$countNum = count($arr);
foreach ($arr as $key => $data){
    $newArray[] =array('name'=>$data);
    $key = $key+1;
    if($key<=$count ) {
        if ($key % $num == 0) {
            DB::table('test')->insert($newArray);
//                    插入数据后要置空数组
            $newArray = array();
        }
    }else {
        if ($key==$countNum){
            $sql =  DB::table('test')->insert($newArray);
                    if ($sql){
                            return response()->json(['serverTime'=>time(),'ServerNo'=>1,'data'=>['message'=>'数据接收完毕']]);
                        }else{
                            return response()->json(['serverTime'=>time(),'ServerNo'=>0,'data'=>['message'=>'数据有丢失']]);
                        }
        }
    }
}
图片.png

2.以上是使用框架的形式,直接传递数组。那么如果我们直接使用原声的写法来看下

$array = [
    ['name1','email1'],
    ['name2','email2'],
    ['name3','email3'],
];
$values = '';
foreach ($array as $user){
    $values.= "('$user[0]','$user[1]')";
}
echo $values;

得到的是这个结果
('name1','email1')('name2','email2')('name3','email3')
根本的原则是,双引号中单引号里面的变量是可以解析的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容