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`;

最終取得所需要的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章