在Wordpress中删除重复的评论?

时间:2013-10-26 17:35:41

标签: sql wordpress comments

任何人都知道sql查询或wordpress插件,它可以帮助我删除重复的评论。

当我导入帖子时,对wordpress的评论,我有一些超时和重复过程,所以有些评论发布了两次。

4 个答案:

答案 0 :(得分:3)

查看一些WordPress架构的图像,然后您应该能够使用查询识别要删除的记录,例如

SELECT wp_comments.*
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_post_id, comment_author, comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

您应该运行上面的查询并确保它返回正确的记录(将被删除的记录)。如果您对查询有效,那么只需将其从SELECT更改为DELETE

DELETE wp_comments
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_post_id, comment_author, comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

答案 1 :(得分:0)

我最近遇到了这个问题,最后编写了这个小脚本来处理它。这有什么好处,它还会给你留下每篇文章的正确评论数。如果您只删除重复的注释而不更改此项,则计数将被关闭。

# First select all comments
$query = "SELECT `comment_ID`, `comment_post_ID`, `comment_content` FROM ".$wpdb->comments." WHERE 1";
$comments = $wpdb->get_results($query);

# Array to hold keeper comment IDs so we dont delete them if there are doops
$keeper_comments = array();

# Now check if each comment has any matching comments from the same post
foreach ($comments as $comment) {
  $query = "SELECT `comment_ID` FROM ".$wpdb->comments." WHERE `comment_ID` != ".$comment->comment_ID." AND `comment_post_ID` = ".$comment->comment_post_ID." AND `comment_content` = '".addslashes($comment->comment_content)."'";
    $matching_comments = $wpdb->get_results($query);
    if ($wpdb->num_rows > 0) {
        foreach ($matching_comments as $matching_comment) {
            if (!in_array($matching_comment->comment_ID, $keeper_comments)) {
                $wpdb->query("DELETE FROM ".$wpdb->comments." WHERE `comment_ID` = ".$matching_comment->comment_ID);
                $wpdb->query("UPDATE ".$wpdb->posts." SET `comment_count` = `comment_count` - 1 WHERE `comment_ID` = ".$matching_comment->comment_ID);
            }
        }
        $keeper_comments[] = $comment->comment_ID;
    }
}

答案 2 :(得分:0)

哇,这就像是一种魅力,一种我最终用来消除所有重复评论而不考虑作者或帖子ID的更具侵略性的形式:

DELETE wp_comments
FROM wp_comments
LEFT JOIN (
    SELECT MIN(comment_id) comment_id
    FROM wp_comments
    GROUP BY comment_content
) to_keep ON wp_comments.comment_id = to_keep.comment_id
WHERE to_keep.comment_id IS NULL

这将删除无用的简短注释,这些注释的工作方式类似于以下模板:“谢谢”,“很棒”。...

答案 3 :(得分:0)

我尝试了以上所有选项。不幸的是,grimmdude没用。 TI提供的解决方案删除了​​两个注释,如果有重复的话。我想保留其中一份。在朋友的一点帮助下,此脚本成功了。

对于需要指导的任何人,这应该是在数据库上运行的SQL查询。

DELETE t1 
FROM wp_comments t1
INNER JOIN wp_comments t2 
WHERE t1.COMMENT_ID < t2.COMMENT_ID AND t1.comment_content = t2.comment_content;