使用mySQL,如何在几个不同的表中按日期排序?

时间:2010-10-02 21:29:45

标签: mysql

我正在尝试为网站生成动态RSS提要,但我在编写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

我猜测需要某种完全连接(事实上,时间以不同的格式会让生活变得困难),但这就是我已经达到的目标。

有什么想法吗?

编辑:工会的想法很好,但是我忘了提到我需要检索的其他信息在两者之间不能相同 - 它们需要稍微不同的处理,我需要检测(轻松通过检查我知道在一个表中需要的信息来检测到足够的信息,如果值为null,则它是另一种类型的条目。

编辑编辑:这是我对相应代码的最佳猜测,但数据库返回一个空表,我不知道为什么。左连接返回信息的一半,右连接返回另一半,如果我使用完全连接,我应该得到所有的,而不是没有。

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

2 个答案:

答案 0 :(得分:3)

SELECT ChapterTitle AS Title, release AS `date` 
  FROM Chapters AS sq
UNION ALL
SELECT Title, `DATETIME` 
  FROM NewsFeed
ORDER BY `date`

答案 1 :(得分: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