【问题标题】:mySQL Returning the top 5 of each categorymySQL 返回每个类别的前 5 名
【发布时间】:2011-06-11 09:26:18
【问题描述】:

我希望每个菜单能够返回 5 个菜单项。我已经尝试了这几个脚本,但没有运气。这是表格

menus
-------
menuid int()
profileName varchar(35)

menuitems
-----------
itemid int()
name varchar(40)

这就是我现在所拥有的。我收到以下脚本的错误消息。错误:子查询返回多于 1 行。

SELECT m.profilename, name
FROM menus m 
WHERE (SELECT name
        from menuitems s
        where m.menuid = s.menuid
        limit 5)

非常感谢任何建议。

【问题讨论】:

    标签: sql mysql greatest-n-per-group


    【解决方案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
    

    【讨论】:

    • 非常感谢!我已经坚持了好几天了。
    • 哇...在查询中选择内联变量...我以前从未见过...奇怪,但很酷。
    【解决方案2】:
    SELECT TOP 5 m.profilename, s.name
    FROM menus m INNER JOIN menuitems s ON m.menuID = s.menuid
    

    【讨论】:

    • 您是否假设他在menuitems 表中有menuid
    • mysql 不支持“TOP N”。
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多