2013-10-26 53 views
0

任何人都知道sql查询或wordpress插件,这可能会帮助我删除重复的评论。删除WordPress中的重复评论?

虽然我导入帖子,评论到wordpress,我有一些超时,并重复的过程,所以一些评论发布两次。

回答

2

考虑看看一些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 
+0

谢谢。以后再试,我现在遇到了更大的问题。 – Mezelderz

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; 
    } 
}