2010-10-02 41 views
5

我試圖爲一個網站生成一個動態的RSS提要,並且我遇到了編寫一個mySQL查詢的麻煩。我有幾個包含我需要訪問的數據的獨立表,並且我想按日期排序所有這些表。使用mySQL,我如何按日期排序幾個不同的表?

作爲一個示例表:

Chapters 
release ChapterTitle ChapterContent ExtraInfo 
10/12 'Chapter 1' 'Bla bla bla' StoryTitle 
10/14 'Chapter 2' 'Bla bla bla' StoryTitle 
10/16 'Chapter 3' 'Bla bla bla' StoryTitle 
10/18 'Chapter 4' 'Bla bla bla' StoryTitle 

NewsFeed 
DATETIME Title Article 
10/11 'Website Online!' 'I now have my website!' 
10/15 'Everything Working!' 'Everything is going well!' 

我希望排序按以下順序返回的東西:

Website Online Text 
Chapter 1 StoryTitle Text 
Chapter 2 Story Title Text 
Everything Working Text 
Chapter 3 Story Title Text 
Chapter 4 Story Title Text 

我猜某種FULL JOIN將是需要的(以及時間不一樣的事實會讓生活變得困難),但是就我所知,這就是事實。

任何想法?

編輯:聯盟的想法很好,但我忘了提及我需要檢索的附加信息在兩者之間不能完全相同 - 它們需要稍微不同的處理,我需要檢測(通過檢查我知道在一個表中需要的信息很容易檢測到,如果該值爲空,那麼它是另一種類型的條目)。

編輯編輯:這是我最好的猜測在適當的代碼,但數據庫正在返回一個空表,我不知道爲什麼。左連接返回一半的信息,右連接返回另一半,如果我使用完全連接,我應該得到所有它,而不是沒有。

select * 
from chapter 
full join newsFeed 
on releaseDate=newsFeed.release 
limit 0, 100 

回答

1

大量的工作後,我終於找到了正確的查詢。問題原來是mySQL不支持完整的外部連接(WTF?),所以我必須將它們結合在一起。爲了在該聯合上執行排序,我最終不得不將該聯合包裝在自己的SELECT子句中,這導致了未命名派生子表的問題。

最後的代碼就出來:

select * 
from 
(
    select * from 
    (
     select chapterTitle, storyID, chapterContent, newsFeed.article, newsFeed.Title, newsFeed.release 
     from chapter 
     right join newsFeed 
     on releaseDate=newsFeed.release 
    ) AS derivedTable1 
    union 
    select * from 
    (
     select chapterTitle, storyID, chapterContent, newsFeed.article, newsFeed.title, releaseDate 
     from chapter 
     left join newsFeed 
     on releaseDate=newsFeed.release 
    ) AS derivedTable2 
) as MainTable 
order By MainTable.release desc 
3
SELECT ChapterTitle AS Title, release AS `date` 
    FROM Chapters AS sq 
UNION ALL 
SELECT Title, `DATETIME` 
    FROM NewsFeed 
ORDER BY `date` 
+0

你可能想'UNION ALL'相當,但使用 – nos 2010-10-02 21:36:15

+1

UNION如果需要刪除重複,而且也沒有必要支架上的每個語句是UNION'd – 2010-10-02 21:36:54

+0

我把括號放在那裏就是安全的 - 它不應該對性能有任何影響。感謝您的編輯。我不認爲UNION和UNION ALL會在這裏有所作爲,因爲兩個表都包含相當不同的數據。 – Mchl 2010-10-02 21:50:32