假设对需要对数据表,根据某几个字段的值进行排重
可以在数据库建立联合唯一索引,具体的方法可以百度有很多方法,虽然简单,但是还是有不够灵活和索引比较占空间的缺点
接下来用其他的方式来解决
生成唯一哈希值
1,将需要排重的字段取出来生成新数组并把key进行字典排序,(倒序或者正序都可以),只要需要是统一
ksort($only_arr);
2,遍历排序后的排重字段,对应值拼接起来,再使用MD5方法生成,也可以使用其他的函数生成
$md5=md5(implode(",",$only_arr));
到此就可以生成唯一的哈希值,这个哈希值就可以作为这条数据的排重字段了,这样就可以把多个字段排重问题,变成一个字段排重的问题。
排重判断
每条数据都生成唯一排重字段后。有两种排重情况:
一是单条录入,可直接先查询此条的哈希值是否在数据库再判断是否插入
二是一次性多条录入:有三种方法:
1,在数据库加上唯一索引,交由数据库处理
2,和单条录入一样,循环遍历查询数据库是否存在。需要先剔除批量录入这批数据重复的
3,查出所有的哈希值字段数据,批量录入的数据先判断是否在查出的数组里面。这边推荐把查出的哈希值作为key值。这样遍历录入数据的时候使用isset函数判断是否存在,比in_array函数判断会快很多。不存在的哈希值要追加回哈希数组,这样后续重复的就可以剔除出来了。
这几种方法各有优劣
1的逻辑处理和性能都比较好,就是比较限定,不够灵活,需要考虑业务是否那个哈希字段不能重复
2的逻辑处理相对复杂点,性能也会差点,批量录入的数据越多,性能越差
3的逻辑处理最为复杂,批量录入的数据越多。性能会越明显比2好
以上只是我的思考后,提供的几种思路和方法,还是要结合自身的业务,选择适合的方法,
也可以组合来解决。
如若有误或者有其他问题请与我交流:2359582968(微信qq同号)