首页 > 解决方案 > MYSQL 在过去 10 分钟内删除每个 id、标题的重复行

问题描述

我目前有它删除重复项,但该过程需要很长时间,所以我试图精简它,而是让它通过以后可能的 cron 作业定期检查新的重复项,或者将其转换为 php 脚本。ID 是主键。这是我到目前为止所拥有的。

这会检查重复项并且效果很好。

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"]);

标签: mysqlduplicatesrows

解决方案


为什么,确切地说,您要删除重复项而不是对 tres.title 设置唯一约束以防止重复项首先被插入?

或者你可以让你的代码使用INSERT ... ON DUPLICATE KEY UPDATE ...

或者您可以编写一个插入前触发器来执行此操作。

追逐重复似乎比阻止它们更糟糕的解决方案。


推荐阅读