首頁 >資料庫 >mysql教程 >如何在 MySQL 中檢索每個類別中前 5 名的項目?

如何在 MySQL 中檢索每個類別中前 5 名的項目?

DDD
DDD原創
2024-11-06 13:33:03367瀏覽

How to Retrieve the Top 5 Items from Each Category in MySQL?

從 MySQL 中的每個類別中檢索前 5 個項目

在使用資料庫時,通常需要以特定方式檢索資料。這個特定問題涉及從 MySQL 中的每個類別中提取前 5 個項目。有問題的表是“menus”和“menuitems”,其中“menus”包含菜單信息,“menuitems”包含有關各個菜單項目的詳細信息。

提供的查詢:

SELECT m.profilename, name
FROM menus m 
WHERE (SELECT name
        from menuitems s
        where m.menuid = s.menuid
        limit 5)

不幸的是,這個查詢不正確,會產生錯誤「子查詢回傳超過 1 行」。出現此錯誤的原因是子查詢為每個選單類別傳回多行,違反了單一選單只能有五個項目的條件。

要解決此問題,您將需要使用副作用變數。

更正後的查詢:

SELECT profilename, name
FROM
(
    SELECT m.profilename, s.name,
        @r:=case when @g=m.profilename then @r+1 else 1 end r,
        @g:=m.profilename
    FROM (select @g:=null,@r:=0) n
    cross join menus m 
    left join menuitems s on m.menuid = s.menuid
) X
WHERE r <= 5

在此更正後的查詢中,我們引入了副作用變數:

  • @g: 保持追蹤目前選單名稱的
  • @r: 計算每個選單的項目
  • r 將結果限制為頂部每個選單5 個項目

透過使用這些變量,查詢將迭代每個選單及其關聯的項目,從而增加每個選單的計數。此技術可確保您僅檢索每個選單類別的前 5 個項目。

以上是如何在 MySQL 中檢索每個類別中前 5 名的項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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