使用MySQL 傳回每個類別中前5 個選單項目
在MySQL 資料庫中,您有包含欄位' 的'menus'表menuid' 和'profileName',以及包含字段'itemid'、'name' 和'menuid' 的'menuitems'表。您想要檢索「選單」表中每個選單的前五個選單項目。
您嘗試的一種方法導致錯誤:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 5)
但是,該錯誤表示子查詢傳回不只一行。為了克服這個問題,您可以使用副作用變數。這是修改後的解決方案:
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 用於追蹤當前選單名稱 (profileName) 以及其中的位置(行號)選單。 CASE 語句確保每個新選單的位置從 1 開始,並針對後續選單項目遞增。最後的 WHERE 子句篩選位置編號最低的前 5 行。
以上是如何檢索 MySQL 中每個選單的前 5 個選單項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!