【发布时间】:2020-04-01 19:41:34
【问题描述】:
我的 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
此代码目前正在按预期生成四篇文章,但它显示:
- 阿拉斯加航空公司文章(相关文章)
- 第 2 条(最新文章)
- 第 3 条(最新文章)
- 阿拉斯加航空公司文章(最新文章)
发生这种情况是因为 a) ALASKA AIRLINES ARTICLE 是唯一相关的文章,b) ALASKA AIRLINES ARTICLE 也恰好是我最近的一篇文章。
我怎样才能让这个 UNION 正常工作,以便它抓取相关文章并用最新的文章填充剩余的文章,同时不包括可能是新的重复项?
[旁注(如果重要):如果有多个关键字,则初始 WHERE 命令可以包含多个 LIKE 命令。我在这个命令中保持简单,只显示一个关键字。我的 php 代码生成多个 LIKE 命令的功能工作正常......但我想知道这一点以防万一。]
【问题讨论】:
标签: mysql sql duplicates union