首先要说一下我遇到这个问题的背景,为了可以针对性解决问题
背景:这是我参与的 “亿佳和” 项目,在生产入库模块上传的一个问题,上传的条码比较多在后来可能是百万级的,而目前到了15w级别。现在用户又上传条码了,大概3000个左右。成功即全部插入,失败提示重复,部分成功,并把另一部分重复条码返回给用户。
要解决的问题:上传3000多条码,如何区分哪些是已经存在于数据库中,哪些是未插入的呢?
我尝试过的办法:
这些方法的结果:
/* $smallall[] //数据库现有条码存入的数组 $wait[][] //此次上传的要插入的条码 $diff[] //重复的条码列表 $ndiff[] //不重复的条码列表,可插入 */ foreach ($wait as $key => $value) { if(!in_array($value[‘smallCode‘],$smallall)){ //smallCode是条码字段 $ndiff[]=$value; }else{ $diff[]=$value; } }
/* $smallall[] //数据库现有条码存入的数组 $wait[][] //此次上传的要插入的条码 $diff[] //重复的条码列表 $ndiff[] //不重复的条码列表,可插入 */ $res=array_flip($smallall); //键值对翻转 foreach ($wait as $key => $value) { if(!isset($res[$value[‘smallCode‘]])){ //smallCode是条码字段 $ndiff[]=$value; }else{ $diff[]=$value; } }
目前问题解决了,一个代码质量的问题。花了一天时间解决的。虽然比较慢但是这样的进步收获是巨大的。
加油!
原文:http://www.cnblogs.com/marchsoft-wangqi/p/6295518.html