從 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
在此更正後的查詢中,我們引入了副作用變數:
透過使用這些變量,查詢將迭代每個選單及其關聯的項目,從而增加每個選單的計數。此技術可確保您僅檢索每個選單類別的前 5 個項目。
以上是如何在 MySQL 中檢索每個類別中前 5 名的項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!