为啥 distinct 不能与 Laravel + Postgresql 一起使用?

Posted

技术标签:

【中文标题】为啥 distinct 不能与 Laravel + Postgresql 一起使用?【英文标题】:Why distinct is not working With Laravel + Postgresql?为什么 distinct 不能与 Laravel + Postgresql 一起使用? 【发布时间】:2017-12-14 20:16:30 【问题描述】:

我想计算ONLY ONE COLUMN 上具有不同值的行数。例如,如果我有activities 表,其中有email 列,我想计算email 列中具有不同值的列数。

我正在使用 Laravel + PostgreSQL。我尝试了以下代码,但它正在计算所有行!

$emailsCount = DB::table('activities')
    ->where('user_id',$UserId)
    ->distinct('email')
    ->count();

后来,我知道distinct() 不会接受任何参数,我试图找到解决我的问题的方法,有人(Other *** Questions)建议我使用groupBy,就像下面的代码一样。

$emailsCount = DB::table('activities')
    ->where('user_id',$UserId)
    ->groupBy('email')
    ->count();

但它返回了错误的信息。例如,在我的情况下,它返回1,但我可以在email 列中看到很多不同的电子邮件。我不知道怎么了。我怎样才能以正确的方式做到这一点?

【问题讨论】:

它返回 1 因为您正在使用 ->where('id',$UserId) 并且只有一个活动与 id 相等 $UserId !! 不,每个用户ID可以有多个电子邮件ID! 你能显示activities 结构吗?我不明白每个用户 ID 可以有多个电子邮件 ID 是什么意思? 我们开始吧!但是对不起,有问题,我应该写user_id而不是id。结构 -> id、user_id、电子邮件、内容、created_at、updated_at 试试这个$emailsCount = DB::table('activities') ->where('user_id',$UserId) ->distinct() ->count(["email"]); !! 【参考方案1】:

正如你所说的distinct() 不接受任何参数,而是可以像这样将该参数传递给count方法:

$emailsCount = DB::table('activities') 
                   ->where('user_id',$UserId) 
                   ->distinct() 
                   ->count(["email"]);

【讨论】:

以上是关于为啥 distinct 不能与 Laravel + Postgresql 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Laravel 中间件 CORS 不能与 Vue.js 一起使用

laravel 中 distinct() 的使用方法与去重

为啥我不能查看这个 laravel 项目?

为啥我不能使用 composer 创建 Laravel 项目?

为啥 Laravel 中的验证不能正常工作?

为啥 Laravel 中的 PHPUnit 不能访问存在的路由?