从 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中文网其他相关文章!