我的查询:如何使这个Mysql查询工作?
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 *
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
这将提供一个名为“排名”计算列,其中最近的一排基于last_message
列的值将为每个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
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-13 18:41:03
@hey :责备MySQL不支持分析功能。在此之前,预计像这样的黑客。另外,你不应该使用'SELECT *' - 因为我不知道FORUM_TOPICS中的列,你会得到所有的列......加上'rank'和列来指定输出中的cat_id值。 – 2010-09-13 18:46:16
oK,tanks .. – 2010-09-13 18:50:01