2014-06-05 54 views
1

我有兩個表格:topicmessage按單個查詢分組排序並組合在一起查詢

topic

topic_id 
// some other not important columns here 

message

message_id 
topic_id 
creation_date 
// some other not important columns here 

正如你所看到的,每個主題可以有很多的消息。

我想獲取的是:所有主題列表(包括所有主題列)以及按屬於主題的最新消息排序的每個主題的消息數量(主題包含最新消息)。

這是我的嘗試:

SELECT topic.*, COUNT(message.message_id) 
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id 
GROUP BY topic.topic_id 
ORDER BY message.creation_date DESC 

這顯然是行不通的。我將不勝感激任何幫助。

+0

什麼是錯誤信息? – Jens

回答

3

您嘗試不起作用的原因是GROUP BY查詢生成的列中沒有message.creation_date

你可以把它添加到輸出,並在排序使用它,像這樣:

SELECT 
    topic.* 
, COUNT(message.message_id) cnt 
, MAX(message.creation_date) last_msg 
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id 
GROUP BY topic.topic_id 
ORDER BY last_msg DESC 

你應該能夠做到有序而不爲它定義列,例如:

SELECT topic.*, COUNT(message.message_id) 
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id 
GROUP BY topic.topic_id 
ORDER BY MAX(message.creation_date) DESC