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