当前使用的 laravel 框架,业务需求:读取上传的 Excel 数据
为了避免重复上传我检查了文件的 hash,
但是:如果文件内容被稍微更改,或其中包含早已写入数据库的值,就需要过滤这部分数据
我现在的做法是:双 foreach 根据各自结果集的部分条件判断来 unsert 原有数据,可以剔除重复的列;显而易见,如果两个结果列数各大于 100, 这个执行过程就要循环大于 10000 次,
??感觉很消耗资源,有没有更好的解决办法呢?? --- 请指教
foreach ($track as $k => $v) {
foreach ($new_arr as $ak => $av) {
if ($av['pur_id'] == $v->pur_id && $av['num'] == $v->num) {
unset($new_arr[$ak]);
}
}
}
如果你判断重复的数据依靠的是数据库的主键(也就是唯一标识)的话,可以考虑直接在插入数据库的时候,使用
replace into
或者insert ignore
来处理重复的数据。前者执行替换,后者执行忽略。判断条件都是主键(联合主键/唯一索引)。