2011-05-31 49 views
0

我有一個非常基礎的論壇系統。三個主表,主題,評論和用戶都有你想象的所有常見字段,例如自動遞增主鍵和外​​鍵,所以我不認爲我需要詳細說明全部內容摘要最近張貼的主題與MySQL

我想要做的是獲得最近發佈的主題列表。列表視圖應顯示主題標題,初始評論/帖子的正文以及作者的姓名,但該列表應與最近最先發布的主題一起排序。

我不是很擅長MySQL以外的最基本的查詢。我顯然可以將它分解成多個查詢,但我希望在一個查詢中獲得性能。

這是我第一次想到的,但它根據第一篇文章的時間排序。

SELECT topic.id as topic_id, topic.title as topic_title, topic.datePosted as datePosted, topic.views as views, topic.numComments as numComments, 
    comment.ID as commentID, comment.body as body, 
user.ID as userID, user.firstName, user.lastName, user.title as user_title, user.city, user.state, user.thumbnail 

FROM comment INNER JOIN topic ON comment.topicID = topic.id 
INNER JOIN user ON comment.userID = user.id 
WHERE comment.id 
     IN (
     SELECT min(comment.id) 
     FROM COMMENT INNER JOIN topic ON comment.topicID = topic.id 
     GROUP BY topic.id 
     ) 

ORDER BY commentID desc'; 
+0

我正在看這個。彈出的第一件事是,datePosted應該是註釋表中的一個字段,而不是主題表,對不對?我假設你想要每個評論時間戳,而不僅僅是最後評論的時間戳? – 2011-05-31 03:28:43

+0

@burk我認爲@King Skuppus是你想要發佈的最新評論後發佈的。 – TheVillageIdiot 2011-05-31 03:39:27

+0

我實際上有一個datePosted字段的評論和主題表。我意識到一個主題的日期可以通過查找最早的評論來推斷,但我試圖保存信息而不是不斷地計算它。我也猜想我可以爲每個主題設置另一個字段,只保存最近發佈的帖子的時間戳,然後我就不會有這個問題。但我很好奇如何這樣做。 – rburk 2011-05-31 03:44:04

回答

0

好吧,這是我第一次重擊一下我認爲你要求,每個主題最近發表的評論列表。讓我知道這是不是你在找什麼:

SELECT 
    t.title, 
    t.views, 
    t.numComments, 
    c.id, 
    c.datePosted, 
    c.body, 
    u.firstName, 
    u.lastName 
FROM 
    topic AS t 
    INNER JOIN 
     (SELECT 
      c_inner.topicId, 
      MAX(c_inner.datePosted) AS latestPosted 
     FROM 
      comment AS c_inner 
     GROUP BY 
      c_inner.topicId) AS cmax 
     ON t.id = cmax.topicId 
    INNER JOIN comment AS c 
     ON c.topicId = cmax.topicId AND c.datePosted = cmax.latestPosted 
    INNER JOIN user AS u 
     ON c.userId = u.id 
ORDER BY c.datePosted DESC; 

如果我誤解你在找什麼,你可以發表您想要的結果的例子嗎?

+0

最新發布的結果確實是最後一篇文章的日期/時間,所以我在查詢的最後添加了'ORDER BY cmax.latestPosted DESC'以使主題以正確的順序出現。但是,正在返回的評論主體似乎並不是該主題原始主題的主體。我毫不猶豫地說這是隨機的,但我不確定什麼是確定哪個評論返回每個主題。 – rburk 2011-05-31 04:45:36

+0

另外,如果我不清楚我在找什麼,我很抱歉。我試圖獲得所有主題的「總結性視圖」。將會爲每個主題設置一個結果集。在這個結果集中是主題標題,初始評論和關於作者的信息。這些結果將通過最近的主題活動進行排序。所以具有最新評論(任何評論)的主題將首先出現。 – rburk 2011-05-31 05:01:15

+0

你說得對,我從非彙總數據中提取行。我已經做了另一次自我加入來解決這個問題,並糾正了上面的答案。給我一個旋轉,讓我知道它是如何工作的。 – 2011-05-31 05:05:09