Heim >Datenbank >MySQL-Tutorial >Wie gruppiere ich Laravel Eloquent-Ergebnisse nach Tagen, wenn die Zeitstempel variieren?
In Laravel kann es beim Abfragen einer Datenbank erforderlich sein, Ergebnisse nach Tagen statt nach Zeitstempeln zu gruppieren. Hier ist eine ausführliche Frage und Antwort zu diesem speziellen Szenario:
Ich habe eine Tabelle mit dem Namen page_views, in der Aufzeichnungen von Seitenbesuchen zusammen mit Zeitstempeln, Benutzer-IP-Adressen und Seiten-IDs gespeichert werden . Obwohl die Methode „groupBy“ verwendet wird, gruppieren Abfragen Daten aufgrund von Unterschieden in Sekunden innerhalb der Zeitstempel nicht korrekt nach Tagen.
Ich möchte Ergebnisse basierend auf Aufrufen pro Tag abrufen, die wie folgt aussehen sollten:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
Kann jemand Erkenntnisse oder Lösungen liefern?
Um Ergebnisse effektiv nach Tagen zu gruppieren, schlägt die Antwort vor, die DATE()-Funktion von MySQL zu nutzen, die den Datumsteil aus einer DateTime extrahiert value:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
Dieser Rohabfrageansatz weicht jedoch von der Abfrage-Builder-Syntax von Eloquent ab. Für eine eloquentere Lösung sieht die Antwort wie folgt aus:
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth()) ->groupBy('date') ->orderBy('date', 'DESC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "views"') ));
Diese Abfrage verwendet Carbon-Daten in der anfänglichen where-Klausel zum Vergleich und wendet entsprechende DB-Rohausdrücke innerhalb der get-Methode an, um beide Daten abzurufen und Anzahl der Aufrufe.
Das obige ist der detaillierte Inhalt vonWie gruppiere ich Laravel Eloquent-Ergebnisse nach Tagen, wenn die Zeitstempel variieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!