0

我的查询:

SELECT * 
FROM forum_topics 
WHERE cat_id IN(1,2,3,4,5,6,7) 
ORDER BY last_message DESC 
LIMIT 7

我想获得每个 cat_id 的最大且只有一个值(总共 7 个值)。如果可能,如何更正此查询以使其工作?

有论坛主题,每个都有价值last_message,我想获取最新主题的消息时间。希望很清楚。

谢谢

4

3 回答 3

1

MySQL 没有分析功能支持,而这正是您真正想要的:

SELECT x.*
  FROM (SELECT ft.*,
               CASE 
                  WHEN @cat_id = ft.cat_id THEN @rownum := @rownum + 1
                  ELSE @rownum := 1
               END AS rank,
               @cat_id = ft.cat_id
          FROM FORUM_TOPICS ft
          JOIN (SELECT @rownum := 0, @cat_id := -1) r
      ORDER BY ft.cat_id, ft.last_message DESC)
 WHERE x.rank = 1

这将提供一个名为“rank”的计算列,其中基于该列的最新行的last_message每个值的值为“1” cat_id。外部查询只获取排名值为 1 的记录...

于 2010-09-13T16:32:00.617 回答
0

你的问题有点令人困惑,但我认为你正在寻找这个。

SELECT * FROM forum_topics WHERE cat_id IN(1,2,3,4,5,6,7) group by cat_id order by max(last_message) LIMIT 7
于 2010-09-13T16:31:25.560 回答
0

添加一个 group by 子句,例如GROUP BY cat_id

所以你的查询将变成SELECT * FROM forum_topics WHERE cat_id IN(1,2,3,4,5,6,7) GROUP BY cat_id ORDER BY last_message DESC LIMIT 7

于 2010-09-13T16:32:43.187 回答