2013-07-06 22 views
0

這裏是情況,我爲表forum_topics,forum_replies和users表。 其中_topics包含所有主題,_replies包含所有帖子,並且用戶包含所有用戶。SQL加入一個表和GROUP BY得到正確的行

我想列出的主題爲:

(主題)_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _(最後回覆時間)

(通過用戶名創建主題)_ __ _ __ _ __ _ __ _ __ _ __(最後回覆方式)

現在,「主題」和「用戶名創建的主題」顯示得很好,但是,最後發佈的帖子和用戶的發佈時間這是錯的。

SQL:

SELECT 
forum_topics.id, 
forum_topics.category, 
forum_topics.subject, 
forum_topics.created AS topiccreate, 
forum_topics.createdby AS topiccreatedby, 
forum_replies.topic, 
forum_replies.created AS repliecreated, 
forum_replies.createdby AS repliecreatedby, 
usertopic.firstname AS topicfirstname, 
usertopic.lastname AS topiclastname, 
userreplie.firstname AS repliefirstname, 
userreplie.lastname AS replielastname, 
usertopic.id as topicid, 
userreplie.id 

FROM forum_topics 

JOIN forum_replies ON forum_replies.topic = forum_topics.id 
JOIN users usertopic ON forum_topics.createdby = usertopic.id 
JOIN users userreplie ON forum_replies.createdby = userreplie.id 

WHERE forum_topics.category = '1' 
GROUP BY forum_replies.topic 
ORDER BY forum_replies.created DESC 

我怎樣才能得到「最後回覆時間」和「最後回覆」,以顯示正確的嗎?我嘗試刪除Group By,然後它檢索所有帖子,但是我只想爲每個主題提供最新的後期數據。

至於現在使用GROUP BY時,它會檢索所有的主題只有一次(正確的),但是最後回覆時間最後回覆的顯示不正確的,因爲它似乎檢索數據爲每個第一篇文章話題。

希望你明白我的問題! :/

回答

0

您還需要一個條件才能得到最新的答覆。這裏是你會怎麼做的join子句中:

FROM forum_topics 
JOIN forum_replies ON forum_replies.topic = forum_topics.id 
JOIN users usertopic ON forum_topics.createdby = usertopic.id 
JOIN users userreplie ON forum_replies.createdby = userreplie.id 
JOIN (select topic, max(created) as maxcreated 
     from forum_replies 
     group by topic 
    ) frmax on frmax.topic = forum_replies.topic and 
       frmax.maxcreated = forum_replies.created; 

我不認爲你將需要group by這樣做了。

+0

謝謝! :) –

0

嘗試在您的SQL查詢中刪除這兩個組並按順序查詢並檢查。