用框架自带的saveall方法 当数据超过一千就会出现遗漏的情况
下面是原生sql方法:
function saveCourse($newArr, $count) {$sql = "replace into edu_wx_school_self_course (study_hour,code,cn_name,en_name,study_score,school_qy) values";for ($a = 1; $a <= $count; $a++) {$hour = $newArr[$a]['study_hour'] ?: 0;$code = $newArr[$a]['code'];$cnname = $newArr[$a]['cn_name'];$enname = $newArr[$a]['en_name'];$sscore = $newArr[$a]['study_score'] ?: 0;$sqy = $newArr[$a]['school_qy'] ?: 0;//拼接$itemStr = '( ';$itemStr .= "'$hour','$code','$cnname','$enname','$sscore','$sqy'";$itemStr .= '),';$sql .= $itemStr;}//移除最后一个逗号$sql = rtrim($sql, ',');$sql .= ';';return Db::execute($sql); }
测试结果一万条数据10秒内即可全部入库成功
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。