2017-07-10 80 views
1

我想指望只有一列具有不同值的行數。例如,如果我有activities表,其中有email柱,我希望計算email列具有不同值的列數。爲什麼不同的工作不隨着Laravel + PostgreSQL的?

我使用Laravel + PostgreSQL的。我嘗試了下面的代碼,但它計數所有的行!

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

後來,我才知道,distinct()將不帶任何參數,我試圖找到一個解決我的問題,有人(其他問題#1)建議我用groupBy就像下面的代碼。

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

但它返回了錯誤的信息。例如,在我的情況下,它返回1,但我可以在email列中看到許多不同的電子郵件。我不知道什麼是錯的。我怎樣才能以正確的方式做到這一點?

+1

它,因爲你正在使用'返回1 - >在哪裏(「身份證」, $用戶ID)'和只有一個活動白衣'id'等於'$ UserId'! – Maraboc

+0

不,每個用戶ID可以擁有多個電子郵件ID! –

+0

您可以顯示'activities'結構?我不明白你的意思是什麼每個用戶ID可以有多個電子郵件ID? – Maraboc

回答

1

正如你所說distinct()不帶任何參數,而不是你可以過時該參數爲count方法是這樣的:

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