Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

Patricia Arquette
Freigeben: 2024-10-27 03:33:03
Original
645 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!