【发布时间】:2019-12-28 06:37:51
【问题描述】:
我正在根据以前为 wordpress 找到的答案运行查询。我希望在过去半小时内查找重复的“跟踪”帖子。我想显示所有重复项并忽略该时间段内的第一篇文章。
我采取了我在时间函数中找到并添加的解决方案,但我看到了包括原始帖子在内的所有帖子,它没有删除第一个帖子。我相信这可能是因为它正在搜索表中的所有帖子,然后添加时间过滤器。我尝试将时间过滤器添加到 select 函数中,但它会出现一个错误,提示未知 post_date 列。
下面给出了过去半小时内的所有重复项,我需要它来删除第一个条目。
SELECT a. *
FROM wp_posts AS a
INNER JOIN (
SELECT post_title, MIN( id ) AS min_id
FROM wp_posts
WHERE post_type = 'track'
AND post_status = 'publish'
GROUP BY post_title
HAVING COUNT( * ) > 1
) AS b ON b.post_title = a.post_title
AND b.min_id <> a.id
AND a.post_type = 'track'
AND a.post_status = 'publish'
AND a.post_date > subtime(now(),'0:30:0')
预期结果将是过去半小时内的所有重复,并且不会显示原始帖子。目前它给了我所有的副本和原件。
【问题讨论】:
-
我已经尝试过您的选择查询,它工作正常,原件是否在时间限制内都没关系。我会发布我的选择,我将 wp_posts 减少到所需的最小值,但只要我一开始看不到你所做的事情,它就不是答案
-
您好,感谢您的回复。我想你可能错过了重点。除了过去 30 分钟内,我不关心在任何时候所做的任何条目。例如,如果我查看过去 30 分钟在我的网站上发布的帖子,我可以看到帖子的标题为“电力”。它首先在 10.11 制作,然后在 10.12、10.13 和 10.14 重复制作。当查询运行时,我希望只看到条目 10.12、10.13 和 10.14。 10.11 可以忽略,因为它是原始版本,因此可以从结果中省略。
-
我在 sqlfiddle 中尝试了您的选择,但由于 b.min_id a.id 您永远无法获得 10.11,因此我从未获得第一个。在大型数据库上,您的解决方案会检查所有行,您可以通过将其减少到所需的行来使其更快。但我仍然无法理解您的问题,您可以在此处添加行以说明您的观点吗? sqlfiddle.com/#!9/35d96f/3
标签: mysql wordpress time duplicates