Heim >Datenbank >MySQL-Tutorial >Wie gruppiere ich Datenbankeinträge nach Tagen mit Laravel Eloquent?

Wie gruppiere ich Datenbankeinträge nach Tagen mit Laravel Eloquent?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 03:33:03750Durchsuche

How to Group Database Records by Days Using Laravel Eloquent?

Nach Tagen gruppierte Datenbankeinträge mit Laravel Eloquent abfragen

Bei der Arbeit mit Datenbanken ist es oft notwendig, Daten nach bestimmten Intervallen zu aggregieren, z Tage. Im Fall von Laravel Eloquent können wir mit der Methode „groupBy()“ eine solche Gruppierung durchführen, aber zeitbasierte Spalten wie „created_at“ können bei Verwendung dieser Methode eine Herausforderung darstellen.

Problem: Gruppierung nach Tagen berücksichtigen Sekunden

Das Problem entsteht, weil die Spalten „created_at“ normalerweise Stunden, Minuten und Sekunden enthalten, was zu unterschiedlichen Zeitstempeln für Ereignisse führt, die am selben Tag stattfinden. Daher können beim Gruppieren nach „created_at“ Datensätze für denselben Tag aufgrund des Zeitunterschieds getrennt sein.

Bedenken Sie beispielsweise die folgenden Beispieldaten:

created_at page_id user_id
2023-10-11 01:02:03 3 1
2023-10-12 12:34:56 5 5
2023-10-13 15:47:12 5 2
2023-10-13 18:23:09 3 4

Wenn wir es versuchen um diese Daten von „created_at“ mithilfe des Eloquent-Befehls zu gruppieren:

<code class="php">$visitorTraffic = PageView::groupBy('created_at')->get();</code>

Am Ende erhalten wir separate Zeilen für jedes Mal, wenn ein Besucher an einem bestimmten Tag auf eine Seite zugegriffen hat, was nicht das gewünschte Ergebnis ist.

Lösung: Verwendung von Rohabfragen und Kohlenstoffdaten

Um dieses Problem zu lösen, besteht eine Lösung darin, Roh-SQL-Abfragen zu verwenden. In MySQL kann die Funktion DATE() verwendet werden, um einen Zeitstempel in das entsprechende Datum umzuwandeln, sodass wir nach Tagen gruppieren können, ohne die Zeitkomponente zu berücksichtigen. Die folgende Abfrage kann verwendet werden:

<code class="sql">DB::table('page_views')
->selectRaw('DATE(created_at) AS date, COUNT(*) AS views')
->groupBy('date')
->get();</code>

Alternativ kann ein stärker auf Laravel Eloquent ausgerichteter Ansatz unter Verwendung von Carbon-Daten verwendet werden:

<code class="php">$visitorTraffic = PageView::where('created_at', '>=', Carbon::now()->subMonth())
->groupBy(DB::raw('DATE(created_at)'))
->orderBy('date', 'DESC')
->get([
    DB::raw('DATE(created_at) AS date'),
    DB::raw('COUNT(*) AS views')
]);</code>

Durch Verwendung der DATE()-Funktion oder von Carbon Daten können wir Datenbankeinträge nach Tagen gruppieren und gleichzeitig sicherstellen, dass Datensätze, die denselben Tag repräsentieren, zusammengefasst werden.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich Datenbankeinträge nach Tagen mit Laravel Eloquent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn