2010-09-13 97 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