我的查詢:如何使這個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