首页  >  文章  >  数据库  >  如何检索 MySQL 中每个菜单的前 5 个菜单项?

如何检索 MySQL 中每个菜单的前 5 个菜单项?

Patricia Arquette
Patricia Arquette原创
2024-11-05 19:44:02852浏览

How to Retrieve the Top 5 Menu Items for Each Menu in MySQL?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn