我有一个MYSQL5数据库和PHP5。我需要一个游戏网站索引页,只选择从每个类别的前12个游戏查询。这是我到目前为止所拥有的。
$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),但我不明白它的意思。
任何帮助都是非常感谢的。
发布于 2010-02-07 08:17:48
这个怎么样?
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发布于 2010-02-07 08:36:01
你可以使用UNION,如果我们谈论的不是百万类型的话...
pseudoSQL:
(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/
好好使用它^^
发布于 2010-02-07 08:15:29
要使用你提到的帖子中的技巧,你需要一种方法来订购游戏。他们用的是文章日期。然后,他们为该公司选择较老的文章数量,并表示不能超过三篇。
如果您的游戏表有一个名为id的自动递增列,您可以选择每个类别的前10个游戏,如下所示:
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行。
https://stackoverflow.com/questions/2215261
复制相似问题