MYSQL在过去10分钟内删除每个id、标题的重复行
我目前有它删除重复,但这个过程太长,所以我试图精简它,而不是让它定期检查新的重复通过可能的cron作业后,或把它变成一个php脚本。ID是主键。这是我到目前为止所拥有的 这会检查重复项,并且效果良好MYSQL在过去10分钟内删除每个id、标题的重复行,mysql,duplicates,rows,Mysql,Duplicates,Rows,我目前有它删除重复,但这个过程太长,所以我试图精简它,而不是让它定期检查新的重复通过可能的cron作业后,或把它变成一个php脚本。ID是主键。这是我到目前为止所拥有的 这会检查重复项,并且效果良好 SELECT title, COUNT(title) FROM `ttrss_entries` WHERE date(date_entered) >= NOW() - INTERVAL 10 MINUTE GROUP BY title HAVING COUNT(title) >
SELECT title, COUNT(title)
FROM `ttrss_entries`
WHERE date(date_entered) >= NOW() - INTERVAL 10 MINUTE
GROUP BY title
HAVING COUNT(title) > 1
删除将删除重复项,但需要大约30分钟才能完成。我希望我可以添加日期时间,每5分钟左右检查一次过去的10分钟
DELETE n1
FROM `ttrss_entries` n1, `ttrss_entries` n2
WHERE n1.id > n2.id AND n1.title= n2.title
$usth = $pdo->prepare(
"INSERT INTO ttrss_entries
(title,
guid,
link,
updated,
content,
content_hash,
no_orig_date,
date_updated,
date_entered,
comments,
num_comments,
plugin_data,
lang,
author)
VALUES
(?, ?, ?, ?, ?, ?,
false,
NOW(),
?, ?, ?, ?, ?, ?)");
$usth->execute([$entry_title,
$entry_guid_hashed,
$entry_link,
$entry_timestamp_fmt,
"$entry_content",
$entry_current_hash,
$date_feed_processed,
$entry_comments,
(int)$num_comments,
$entry_plugin_data,
"$entry_language",
"$entry_author"]);
如果cron不可能做到这一点,那么一天一次就足够了。但是加载时间对于删除过程来说太长了。如果不能使用cron,那么一天一次就足够了。但是加载时间对于删除过程来说太长了。确切地说,为什么您要跟踪重复项以进行删除,而不是在tress.title上设置一个唯一的约束,以防止重复项首先被插入 或者你可以让你的代码使用
INSERT。。。在重复密钥更新时…
或者您可以编写一个before insert触发器来执行此操作
追踪重复项似乎比阻止重复项更糟糕。确切地说,为什么要追踪重复项以进行删除,而不是在tress.title上设置唯一的约束以防止重复项被插入 或者你可以让你的代码使用
INSERT。。。在重复密钥更新时…
或者您可以编写一个before insert触发器来执行此操作
追踪重复项似乎比防止重复项更糟糕。cron作业?但你肯定只会运行一次吗?每天一次,但它确实会添加大量副本,因此我需要找到一种方法,避免在插入失败时创建副本,或者在一小时内将其作为cronjob/脚本运行多次。是的。找到一种方法来防止在cron作业中创建重复项?但你肯定只会运行一次吗?每天一次,但它确实会添加大量副本,因此我需要找到一种方法,避免在插入失败时创建副本,或者在一小时内将其作为cronjob/脚本运行多次。是的。找到一种防止复制的方法,因为它是一个名为Tiny Tiny RSS的预制脚本,我相信代码中已经有了。不幸的是,它没有成功。代码是否受到了唯一的约束?如果是这样的话,一个before insert触发器应该允许你默默地丢弃重复的内容。我发现它只检查重复的散列,而不是重复的标题或内容。因此,我不确定是否可以使用该方法,我将发布上面的插入代码。您可以以任何方式定义唯一约束,问题是,当代码试图插入一条记录时,数据库是否会返回一个错误,这将导致唯一约束冲突。好的,我收到了这个错误消息E_USER_NOTICE(1024)SQLSTATE[42000]:语法错误或访问冲突:1064因为它是一个名为Tiny Tiny RSS的预制脚本,我相信代码中已经有了。不幸的是,它没有成功。代码是否受到了唯一的约束?如果是这样的话,一个before insert触发器应该允许你默默地丢弃重复的内容。我发现它只检查重复的散列,而不是重复的标题或内容。因此,我不确定是否可以使用该方法,我将发布上面的插入代码。您可以以任何方式定义唯一约束,问题是,当代码试图插入一条记录时,数据库是否会返回一个错误,该记录将导致唯一约束冲突。好的,我收到了这个错误消息E_USER_NOTICE(1024)SQLSTATE[42000]:语法错误或访问冲突:1064