首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高级SQL查询。每个类别的前12名(MYSQL)

高级SQL查询。每个类别的前12名(MYSQL)
EN

Stack Overflow用户
提问于 2010-02-07 07:58:42
回答 4查看 1.9K关注 0票数 5

我有一个MYSQL5数据库和PHP5。我需要一个游戏网站索引页,只选择从每个类别的前12个游戏查询。这是我到目前为止所拥有的。

代码语言:javascript
运行
复制
$db->query("SELECT * FROM  `games` WHERE status = 'game_published'  AND `featured` =  '1' ORDER BY `category`");

然后php代码将相同类别的游戏分组在一起并显示它们。但是,是的,它并没有像我想要的那样限制每个类别的游戏数量。

下面是该表的结构: i49.tinypic.com/aysoll.png

这里有一篇博客文章,听起来像是我想要做的:http://www.e-nformation.net/content/view/title/MySQL+Top+N+in+each+group+(group+inner+limit),但我不明白它的意思。

任何帮助都是非常感谢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-07 08:17:48

这个怎么样?

代码语言:javascript
运行
复制
SELECT * FROM (
    SELECT
       games.*,
       @rn := CASE WHEN @category=category THEN @rn + 1 ELSE 1 END AS rn,
       @category := category
    FROM games, (SELECT @rn := 0, @category := NULL) AS vars
    WHERE status = 'game_published' AND featured = '1'
    ORDER BY category
) AS T1
WHERE rn <= 12
票数 1
EN

Stack Overflow用户

发布于 2010-02-07 08:36:01

你可以使用UNION,如果我们谈论的不是百万类型的话...

pseudoSQL:

代码语言:javascript
运行
复制
(SELECT * FROM table WHERE condition AND category = 'action' ORDER BY id LIMIT 10)
UNION
(SELECT * FROM table WHERE condition AND category = 'action' ORDER BY id LIMIT 10)
UNION
(SELECT * FROM table WHERE condition AND category = 'action' ORDER BY id LIMIT 10)

如果您的PHP/ASP中有类别数组,则可以动态生成此联合。

更多信息:http://dev.mysql.com/doc/refman/5.0/en/union.html

编辑:这里可能是最有用的资源:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

好好使用它^^

票数 1
EN

Stack Overflow用户

发布于 2010-02-07 08:15:29

要使用你提到的帖子中的技巧,你需要一种方法来订购游戏。他们用的是文章日期。然后,他们为该公司选择较老的文章数量,并表示不能超过三篇。

如果您的游戏表有一个名为id的自动递增列,您可以选择每个类别的前10个游戏,如下所示:

代码语言:javascript
运行
复制
SELECT   *
FROM     games g1
WHERE    status = 'game_published'  
         AND featured = '1' 
         AND 10 > 
         (
         SELECT   COUNT(*)
         FROM     games g2
         WHERE    g2.status = 'game_published'  
                  AND g2.featured = '1' 
                  AND g1.category = g2.category
                  AND g2.id > g1.id
         )

where条件规定,具有相同类别和更高ID的行不能超过10行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2215261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档