为啥 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 一起使用