如何在 MySQL 中檢索每個類別的前 5 項,同時避免「子查詢傳回超過 1 行」錯誤?

Linda Hamilton
發布: 2024-11-10 09:13:03
原創
480 人瀏覽過

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

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

嘗試取得時遇到錯誤「子查詢返回超過1 行」每個菜單類別的前五個菜單項目?解決方案在於使用副作用變數。

讓我們分解修改後的方法:

在子查詢中,我們使用 SQL 的 @ 表示法引入副作用變數 @r 和 @g。這些變數用於追蹤組成員身份並增加每個組內的排名。

  1. @g:=null - 將 @g 初始化為 NULL,表示我們正在開始一個新群組。
  2. @r:=0 - 將 @r 初始化為 0,表示新排名的開始。
  3. 子查詢中的 WHERE 子句(其中m.menuid = s.menuid) 確保 s 和 m 根據選單 ID 對齊。
  4. @r:=case when @g=m.profilename then @r 1 else 1 end - 此 case 表達式遞增如果 m.profilename 與目前群組 (@g) 相同,則 @r 加 1。否則,它將 @r 重設為 1,表示新組的開始。
  5. @g:=m.profilename - 使用目前群組的設定檔名稱更新@g,讓我們追蹤屬於群組的後續行
  6. 主查詢從子查詢表別名X中檢索profilename和name。
  7. 最後的WHERE r

透過實作此方法,您可以有效率地獲得所需的結果,而不會出現「子查詢傳回超過 1 行」的錯誤。

以上是如何在 MySQL 中檢索每個類別的前 5 項,同時避免「子查詢傳回超過 1 行」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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