我的SQL UNION命令正在生成重复的记录。是的,我知道UNION ALL应该包含重复项,而UNION不...但是由于某种原因,我的仍然在生成重复项。我不是SQL专家,并且了解足够多,可以使用简单和基本的命令来获取所需的信息……因此,我敢肯定,我在某个地方搞砸了。
目标:从SQL数据库检索新闻文章。我想抓最多4篇文章,其中最相关的文章是第一篇。如果少于4条相关文章(尚未过期),我想用最新创建的文章(尚未过期)填充其余内容。 (过期的文章表示某种交易已经结束,因此无需向公众展示该文章。)>
当前代码(带有示例):
SELECT *, 0 AS Priority FROM tblNews WHERE (ArticleKeywords LIKE '%alaska airlines%') AND (CURRENT_DATE < ArticleExpireDate OR ArticleExpireDate = '0000-00-00') UNION SELECT *, 1 AS Priority FROM tblNews WHERE (CURRENT_DATE < ArticleExpireDate OR ArticleExpireDate = '0000-00-00') ORDER BY Priority, ArticleDate DESC LIMIT 4
此代码目前正在生成预期的四篇文章,但显示:
这是因为a)阿拉斯加航空公司的文章是唯一相关的文章,b)阿拉斯加航空公司的文章也恰好是我最近的文章之一。
我如何使这个UNION正常工作,以便它抓住相关文章并用最新的文章填充其余文章,而不包括可能也是新的重复文章?
[Sidenote(如果重要):如果关键字不止一个,则初始WHERE命令可以包含多个LIKE命令。我在此命令中保持简单,只显示了一个关键字。我的php代码生成多个LIKE命令的功能可以正常工作...但是我想以防万一。]
提前感谢!
我的SQL UNION命令正在生成重复的记录。是的,我知道UNION ALL应该包含重复项,而UNION不...但是由于某种原因,我的仍然在生成重复项。我是...
请勿使用UNION ALL
。使用ORDER BY
:
结果集中的附加列,称为Priority
,可防止MySQL将记录标识为重复项。