2017-12-18 1 views
2

Ich habe zwei Tabellen mit dem Namen "Favoriten" und "Trails". Ich möchte die 10 beliebtesten Favoriten für Benutzer anzeigen. Ich habe "viele zu viele" Beziehungen zwischen ihnen gemacht. Aber, ich bin nicht sicher, wie man die Frage stellt. Was sollte die richtige Frage sein. Würde jemand mir für den richtigen helfen. Ohne Beziehung habe ich versucht, so etwas wie this-Ich möchte Top 10 Lieblingswege in Laravel Abfragen finden

$favorites = DB::table('favorites') 
            ->join('trails', 'trails.id', '=', 'favorites.trail_id') 
            ->select('favorites.trail_id', 'trails.name') 
            ->get(); 

erste ist 'Trails' Tisch und eine andere ist 'Favoriten' brüllen -

trails

favorites

Antwort

1

die Spitze zu kommen 10 Trails müssen Sie Aggregatfunktion verwenden, um keine Benutzer für jeden Trail zu zählen und Ihre Ergebnisse basierend auf dem Ergebnis der Zählung zu ordnen und dann nur 10

auswählen
$favorites = DB::table('trails as t') 
       ->select('t.id', 't.name') 
       ->join('favorites as f', 't.id', '=', 'f.trail_id') 
       ->groupBy('t.id') 
       ->groupBy('t.name') 
       ->orderByRaw('COUNT(DISTINCT f.user_id) DESC') 
       ->limit(10) 
       ->get(); 
+0

Erhalte Abfrage Ausnahme –

+0

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1055 'trampboard.t.name' ist nicht in GROUP BY (SQL: Wählen Sie 't'.id',' t'. 'name' von' trails' als 't' innere Verbindung' favorites' als 'f' auf' t'.id' = 'f'.trail_id' Gruppe nach' t'.identität by COUNT (DISTINCT f.user_id) DESC Limit 10) –

+0

@ Md.RashulHasan Ich habe meine Antwort aktualisiert ja der Name war nicht in der Gruppe by Klausel und möglicherweise Sie laufen 5.7 oder 'only_full_group_by 'Modus ist aktiviert –