AR查询多字段结果去重

来源:互联网 发布:淘宝店铺怎么投诉 编辑:程序博客网 时间:2024/04/29 04:48

需要解决的问题:假设有表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`;

最终取得所需要的数据。

原创粉丝点击