从 MySQL 中检索每个类别的前 5 项
尝试获取时遇到错误“子查询返回超过 1 行”每个菜单类别的前五个菜单项?解决方案在于使用副作用变量。
让我们分解一下修改后的方法:
在子查询中,我们使用 SQL 的 @ 表示法引入副作用变量 @r 和 @g。这些变量用于跟踪组成员身份并增加每个组内的排名。
- @g:=null - 将 @g 初始化为 NULL,表示我们正在开始一个新组。
- @r:=0 - 将 @r 初始化为 0,表示新排名的开始。
- 子查询中的 WHERE 子句(其中 m.menuid = s.menuid)确保 s 和 m 是根据菜单 ID 对齐。
- @r:=case when @g=m.profilename then @r 1 else 1 end - 如果 m.profilename 与当前相同,则此 case 表达式将 @r 递增 1组(@g)。否则,它将 @r 重置为 1,表示新组的开始。
- @g:=m.profilename - 使用当前组的配置文件名称更新 @g,允许我们跟踪属于该组的后续行
- 主查询从子查询表别名 X 中检索配置文件名称和名称。
- 最终的 WHERE r
通过实现这种方法,您可以高效地获得所需的结果,而不会出现“子查询返回超过 1 行”的错误。
以上是如何在 MySQL 中检索每个类别的前 5 项,同时避免'子查询返回超过 1 行”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!