我正在尝试为网站生成动态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
答案 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