多字段排重

假设对需要对数据表,根据某几个字段的值进行排重

可以在数据库建立联合唯一索引,具体的方法可以百度有很多方法,虽然简单,但是还是有不够灵活索引比较占空间的缺点

接下来用其他的方式来解决

生成唯一哈希值

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同号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值