從MySQL 檢索每個類別的前5 項
嘗試取得時遇到錯誤「子查詢返回超過1 行」每個菜單類別的前五個菜單項目?解決方案在於使用副作用變數。
讓我們分解修改後的方法:
在子查詢中,我們使用 SQL 的 @ 表示法引入副作用變數 @r 和 @g。這些變數用於追蹤組成員身份並增加每個組內的排名。
- @g:=null - 將 @g 初始化為 NULL,表示我們正在開始一個新群組。
- @r:=0 - 將 @r 初始化為 0,表示新排名的開始。
- 子查詢中的 WHERE 子句(其中m.menuid = s.menuid) 確保 s 和 m 根據選單 ID 對齊。
- @r:=case when @g=m.profilename then @r 1 else 1 end - 此 case 表達式遞增如果 m.profilename 與目前群組 (@g) 相同,則 @r 加 1。否則,它將 @r 重設為 1,表示新組的開始。
- @g:=m.profilename - 使用目前群組的設定檔名稱更新@g,讓我們追蹤屬於群組的後續行
- 主查詢從子查詢表別名X中檢索profilename和name。
- 最後的WHERE r
透過實作此方法,您可以有效率地獲得所需的結果,而不會出現「子查詢傳回超過 1 行」的錯誤。
以上是如何在 MySQL 中檢索每個類別的前 5 項,同時避免「子查詢傳回超過 1 行」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!