【问题标题】: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 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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多