用於從各個類別檢索最新項目的單一 SQL 查詢
本文介紹了高效的 SQL 解決方案,用於使用單一資料庫查詢檢索多個類別中的最新項目,從而最大限度地減少資料庫呼叫。
SQL 解決方案:利用外連線
使用外連接可以優雅地解決「每組最大n個」問題:
<code class="language-sql">SELECT i1.* FROM item i1 LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id) GROUP BY i1.item_id HAVING COUNT(i2.item_id) < 4;</code>
此查詢有效地選擇各自類別中少於四個新項目的項目。
說明:
查詢將每個項目 (i1
) 與同一類別中具有更高 i2
的其他項目 (item_id
) 連接起來(意味著它們較新)。 HAVING
子句過濾掉具有三個或更多較新項目的項目,每個類別僅留下四個最新項目。
優點:
替代方法:
此方法使用 MySQL 的使用者定義變數來指派行號並識別每個類別的四個最新項目。 (這種方法的可移植性不如外連接方法)。
MySQL 8.0.3 支援標準 SQL 視窗函數,提供更簡潔的解決方案:
<code class="language-sql">WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id DESC) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;</code>
此方法按類別對項目進行分區,根據 item_id
分配行號(按降序排列,最新的在前),然後從每個分區中選擇前四行。
以上是如何使用單一 SQL 查詢從多個類別中檢索最新項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!