我的查询:
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
,我想获取最新主题的消息时间。希望很清楚。
谢谢
我的查询:
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
,我想获取最新主题的消息时间。希望很清楚。
谢谢
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 的记录...
你的问题有点令人困惑,但我认为你正在寻找这个。
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
添加一个 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