【发布时间】: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 Stackoverflow 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"]);!!
标签: php sql postgresql laravel laravel-5