代码之家  ›  专栏  ›  技术社区  ›  RonLugge

使用mySQL,如何跨多个不同的表按日期排序?

  •  5
  • RonLugge  · 技术社区  · 14 年前

    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
    

    我猜某种形式的完全连接将是必要的(事实上,时代的不同形式将使生活变得困难),但这是我所得到的。

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

    select *
    from chapter
    full join newsFeed
    on releaseDate=newsFeed.release
    limit 0, 100
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   OMG Ponies    14 年前
    SELECT ChapterTitle AS Title, release AS `date` 
      FROM Chapters AS sq
    UNION ALL
    SELECT Title, `DATETIME` 
      FROM NewsFeed
    ORDER BY `date`
    
        2
  •  1
  •   RonLugge    14 年前

    经过大量的工作,我终于找到了正确的查询。问题是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