首页 >数据库 >mysql教程 >如何在 MySQL 中检索每个类别中前 5 名的项目?

如何在 MySQL 中检索每个类别中前 5 名的项目?

DDD
DDD原创
2024-11-06 13:33:03367浏览

How to Retrieve the Top 5 Items from Each Category in MySQL?

从 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

在此更正后的查询中,我们引入了副作用变量:

  • @g: 保持跟踪当前菜单名称的
  • @r: 计算每个菜单的项目
  • r 将结果限制为顶部每个菜单 5 个项目

通过使用这些变量,查询将迭代每个菜单及其关联的项目,从而增加每个菜单的计数。此技术可确保您仅检索每个菜单类别的前 5 个项目。

以上是如何在 MySQL 中检索每个类别中前 5 名的项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

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