2010-09-13 95 views
0

我的查询:如何使这个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,我想获得最新话题的消息时间。希望很清楚。

谢谢

回答

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 

这将提供一个名为“排名”计算列,其中最近的一排基于last_message列的值将为每个cat_id值“1”。外部查询只得到它的等级值是一个记录......

+1

这个查询看起来丑陋的地狱:/ – 2010-09-13 18:41:03

+1

@hey :责备MySQL不支持分析功能。在此之前,预计像这样的黑客。另外,你不应该使用'SELECT *' - 因为我不知道FORUM_TOPICS中的列,你会得到所有的列......加上'rank'和列来指定输出中的cat_id值。 – 2010-09-13 18:46:16

+0

oK,tanks .. – 2010-09-13 18:50:01

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 
0

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