首頁 > 資料庫 > mysql教程 > 如何使用單一 SQL 查詢從多個類別中檢索最新項目?

如何使用單一 SQL 查詢從多個類別中檢索最新項目?

Linda Hamilton
發布: 2025-01-22 02:06:12
原創
670 人瀏覽過

How Can I Retrieve the Newest Items from Multiple Categories Using a Single SQL Query?

用於從各個類別檢索最新項目的單一 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 的使用者定義變數來指派行號並識別每個類別的四個最新項目。 (這種方法的可移植性不如外連接方法)。

  • 視窗函數(MySQL 8.0.3 及更高版本):

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板