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

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

Patricia Arquette
发布: 2024-11-06 02:17:02
原创
1026 人浏览过

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

返回 MySQL 中每个类别的前 5 个项目

挑战:
检索前 5 个菜单数据库中每个类别的项目由两个表“menus”和“menuitems”组成。

解决方案:

所提供的代码旨在显示前 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
登录后复制

细分:

  1. 外部查询从子查询 (X) 中选择名称(类别)和名称(菜单项),子查询 (X) 通过副作用变量 (@r、@g) 分配行位置 (r) 和组标识符 (g) 值。
  2. 子查询在菜单表 (m) 和表 (n) 之间采用交叉联接,分别用 @g 和 @r 初始化为 NULL 和 0。
  3. 与 menuitems 表 (s) 的 JOIN 添加了基于菜单 ID 的菜单项名称。
  4. CASE 语句分配行位置值,同一类别中的每行递增 1。如果遇到新类别,它将计数器重置为 1。
  5. WHERE 子句根据行位置值筛选结果,仅包含每个类别前 5 名中的行。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板