2012-05-26 129 views
0

我有兩個表。合併和排序兩個表

「線程」 擁有ID,forumID,標題,內容,unixtime

「意見」 擁有ID,線程ID,內容,unixtime

我願做一個MySQL查詢這種種這兩個表中的所有行都基於它們的unixtime,但也不會顯示兩次相同的「threadID」。

以下查詢將合併兩個表並對它們排序,但我不能刪除線程的重複項。我嘗試過一些GROUP BY和DISTINCT,但沒有運氣。

(SELECT unixtime, ID, threadID FROM comments) 
UNION 
(SELECT unixtime, ID, forumID FROM threads) 
ORDER BY unixtime DESC 

它顯示的論壇的首頁,因此,讓同一個線程出現不止一次是沒有意義的。

編輯:我想顯示最新的評論和最新的線程。

回答

1
SELECT unixtime, ID, type, type_id 
FROM ((SELECT unixtime, ID, 'comment' AS type, threadID, forumID 
     FROM ( SELECT unixtime, ID, threadID 
       FROM comments 
       ORDER BY unixtime DESC) AS h 
     GROUP BY threadID) 
     UNION ALL 
     (SELECT unixtime, ID, 'thread', ID, forumID 
     FROM threads) 
     ORDER BY unixtime DESC) AS h2 
GROUP BY threadID 
ORDER BY unixtime DESC 

我改變了一些東西。我假設你想知道它是一個論壇還是線程ID?

+0

這幾乎可行!唯一的問題是同一個線程將從「線程」表中刪除一次,並從「註釋」表中刪除一次。任何方式來避免這種情況? – Christoffer

+0

是的,實際上是。 「forumID」 – Christoffer

+0

嘗試更新查詢。 –

0

簡單的解決方案,如果你沒有按鍵的加入:

Select DISTINCT tbl.unixtime from 
    (
    (SELECT unixtime, ID, threadID FROM comments) 
    UNION 
    (SELECT unixtime, ID, forumID FROM threads) 
    ORDER BY unixtime DESC)) 
    As tbl 
+0

我需要比unixtime多,所以我已經試過: 'SELECT DISTINCT tbl.unixtime,tbl.ID,tbl.tID從 ( (SELECT unixtime,ID,線程ID爲tID FROM評論) UNION (SELECT unixtime,ID,forumID爲tID FROM線程) ORDER BY unixtime DESC LIMIT 0,100 )作爲tbl' 但theres仍然複製:( – Christoffer

+0

可以在一端由(unixtime使用組).. –

0

這將幫助你得到的只有唯一的線程ID

(SELECT forumID, ID, unixtime FROM threads) 
UNION 
(SELECT distinct(threadID), ID, max(unixtime) FROM comments GROUPBY threadID) 
ORDER BY unixtime DESC 
+0

這幾乎可以工作! 唯一的問題是,同一個線程會從「線程」和表中刪除一次,並從「註釋」表中刪除一次。 有什麼辦法可以避免這種情況? – Christoffer

+0

你想只有一個論壇的線程和該線程的一個評論.. 我對嗎? – Uttara

+0

我只想要一次顯示線程。上述羅賓斯解決方案完美的作品 – Christoffer