2017-07-10 5 views
1

Ich möchte die Anzahl der Zeilen mit unterschiedlichen Werten auf zählen NUR EINE SPALTE. Zum Beispiel, wenn ich activities Tabelle habe, in der email Spalte ist, möchte ich die Anzahl der Spalten mit unterschiedlichen Wert in email Spalte zählen.Warum distinct funktioniert nicht mit Laravel + Postgresql?

Ich bin mit Laravel + PostgreSQL. Ich habe den folgenden Code ausprobiert, aber es zählt alle Zeilen!

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

Später kam ich zu wissen, dass distinct() werden keine Argumente habe ich versucht, eine Lösung für mein Problem und jemand (andere Stackoverflow Fragen) vorgeschlagen, mich zu finden groupBy wie dem folgenden Code zu verwenden.

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

Aber es gibt falsche Informationen zurück. Zum Beispiel: In meinem Fall gibt es 1 zurück, aber ich kann viele und viele verschiedene E-Mails in email Spalte sehen. Ich weiss nicht, was falsch ist. Wie kann ich das richtig machen?

+1

es gibt 1 zurück, weil Sie mit '-> where ('id', $ UserId) 'und es gibt nur eine Aktivität, bei der 'id' gleich $ UserId ist !! – Maraboc

+0

Nein, jede Benutzer-ID kann mehrere E-Mail-ID haben! –

+0

Können Sie die Struktur der Aktivitäten zeigen? und ich habe nicht verstanden, was meinst du mit jeder Benutzer-ID kann mehrere E-Mail-ID haben? – Maraboc

Antwort

1

Wie Sie distinct() sagte keine Argumente nehmen, stattdessen können Sie diesen Parameter an die count Methode wie folgt passe:

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