首頁 >資料庫 >mysql教程 >如何使用 Laravel Eloquent 按天將資料庫記錄分組?

如何使用 Laravel Eloquent 按天將資料庫記錄分組?

Patricia Arquette
Patricia Arquette原創
2024-10-27 03:33:03750瀏覽

How to Group Database Records by Days Using Laravel Eloquent?

使用Laravel Eloquent 查詢按天分組的資料庫記錄

在使用資料庫時,經常需要按一定的時間間隔聚合數據,例如天。就 Laravel Eloquent 而言,groupBy() 方法允許我們執行此類分組,但是像created_at 這樣的基於時間的列在使用此方法時可能會帶來挑戰。

問題:按天分組考慮秒

出現此問題的原因是created_at 列通常包含小時、分鐘和秒,導致同一天發生的事件的時間戳不同。因此,當按created_at進行分組時,同一天的記錄可能會因時差而被分開。

例如,考慮以下範例資料:

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

如果我們嘗試使用Eloquent指令透過created_at將這些資料分組:

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

每次訪客都在特定日期訪問頁面時,我們都會得到單獨的行,這不是期望的結果。

解決方案:使用原始查詢和碳日期

要解決此問題,一種解決方案是使用原始 SQL 查詢。在MySQL中,DATE()函數可用於將時間戳轉換為其對應的日期,允許我們按天分組而不考慮時間部分。可以使用以下查詢:

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

或者,可以使用Carbon 日期採用更以Laravel Eloquent 為中心的方法:

<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>

透過利用DATE() 函數或Carbon日期,我們可以按天對資料庫記錄進行分組,同時確保代表同一天的記錄聚合在一起。

以上是如何使用 Laravel Eloquent 按天將資料庫記錄分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn