0

我有一个博客 SQL 系统,其中包含这样的“帖子”表(id、主题、标题、内容、已创建)。

我想获取每个帖子主题的最后 3 个标题,以显示在表格中,但我没有得到它。

我试过这个 SQL 代码:

SELECT *
FROM posts
GROUP BY theme
ORDER BY created DESC
LIMIT 0,3

但这给了我表格的最后 3 个帖子!!!

你能帮我么?

提前致谢。

4

2 回答 2

2

您在某些方面做得对,但在其他方面您不理解该GROUP BY子句的用法。

以上LIMIT适用于整个查询结果。此外,您还需要一个聚合函数GROUP BY来应用 ,例如SUMAVG等。您不能简单地SELECT *期望按 分组theme

GROUP BY返回您分组的每个项目的一行,例如,最新的,不是三行。

因此,您需要根据分组依据的每个主题执行查询,但在这种情况下,您根本不需要分组依据。编写一个循环,为您需要的每个主题执行此查询:

SELECT *
FROM posts
WHERE theme = "your-theme"
ORDER BY created DESC
LIMIT 0,3
于 2012-04-29T11:15:24.037 回答
0

Josvic Zammit 的回答部分正确(我 +1),但您不必按主题执行查询。这是您可以在 MySQL 中执行此操作的一种方式,尽管在 PHP 或其他任何方式中“执行每个主题的查询”肯定会更容易。

SELECT * FROM
(
SELECT
IF(@prev != sq.theme, @rownum:=1, @rownum:=@rownum + 1) AS rownumber, @prev:=sq.theme, sq.*
FROM
(
    SELECT
    *
    FROM
    posts
    , (SELECT @rownum:=0, @prev:=0) r 
    ORDER BY theme, created DESC
) sq
) q
WHERE q.rownumber <= 3

请注意,不幸的是,我现在无法对其进行测试,但它应该可以工作。另请注意,此查询可能比对每个主题执行更简单的查询要慢。

于 2012-04-29T12:08:21.720 回答