AR查询多字段结果去重

需要解决的问题:假设有表user,查询其中字段user_name和mobile;在数据中mobile有多条重复,当前我们想去重然后取出多条数据,我们需要相同的名字和手机号只作为一条记录显示
常规的方法是以下查询:

Users::find()->select(['user_name','mobile'])->distinct()->where(['mobile'=>'xxxxxxxxxxx'])->all();

所获取的sql如下:

SELECT DISTINCT `user_name`, `mobile` FROM `hundred2_users` WHERE `mobile`='xxxxxxxxxxx';

使用这条sql查询之后大家会发现无法去重,原因是DISTINCT了他后面的两个字段,必须在user_name和mobile都重复的情况下才会去重。为了解决这种尴尬的问题,我们使用以下的方法,已去重mobile为例:

Users::find()->select(['user_name','mobile'])->groupBy(['mobile','user_name'])->where(['mobile'=>'xxxxxxxxxxx']);

会获得以下sql:

SELECT `user_name`, `mobile` FROM `hundred2_users` WHERE `mobile`='xxxxxxxxxxx' GROUP BY `mobile`;

最终取得所需要的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值