MySQL 查詢:從表中的每個類別中選擇前3 行
在這種情況下,您有一個包含大量記錄的表,按類別分類。您的目標是僅檢索每個類別中的前三篇文章。當您嘗試使用視圖和 LIMIT 的解決方案時,它會導致記錄數量有限。
為了應對這個挑戰,有必要利用 MySQL 所缺乏的分析函數。但是,您可以使用變數來實現類似的效果:
<code class="sql">SELECT x.* FROM ( SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category ) x WHERE x.rank <= 3</code>
此查詢使用變數 @rownum 和 @category 來追蹤類別內的行排名。它首先將兩個變數設為 NULL/空值。
對於表中的每一行(別名“t”),它檢查當前類別是否與前一個類別不同。如果是,則將 1 分配給 @rownum;否則,它會將 @rownum 加 1。同時,它將當前類別分配給 @category,以維護後續行中比較的上下文。
結果是一個臨時表,對類別中的每一行進行排名。然後,最後的 WHERE 子句會過濾此臨時表,以僅顯示排名為 3 或更低的行。
請記住調整外部 SELECT 子句 (x.*) 中的欄位參考以符合您想要的列檢索。
以上是如何在不使用分析函數的情況下從 MySQL 表中的每個類別中選擇前 3 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!