MySQL запрос на удаление дубликатов комментариев Wordpress? - PullRequest
4 голосов
/ 24 июля 2011

У меня была проблема с Disqus, из-за которой он создавал дублирующие комментарии ко многим постам, иногда 4 дубликата одного и того же комментария. Я пытался удалить их вручную, но у нас в общей сложности более 10 тысяч комментариев, и, к сожалению, это произошло случайно, в результате чего это произошло только с некоторыми сообщениями. Итак ...

Кто-нибудь знает запрос mysql, по которому я мог бы обнаружить и удалить дублирующиеся комментарии, выполнив поиск записей, которые совпадают с точки зрения самого комментария или автора? Идентификаторы комментариев не являются дубликатами (он создает новые идентификаторы комментариев для каждого), поэтому я не уверен, как это сделать в mysql (плюс я не очень хорош в этом: -) ... Любая помощь будет принята с благодарностью. Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Улучшение по предложению Blackbarn, попробуйте это (после резервного копирования БД):

global $wpdb;

$comments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."_comments"
   ." ORDER BY comment_post_ID, comment_content");

$prev = NULL;

foreach($comments as $comment) {

  if ($prev && $prev->comment_content == $comment->comment_content
    && $prev->comment_post_ID == $comment->comment_post_ID ) { // add maybe other rules here

    $wpdb->query("DELETE FROM ".$wpdb->prefix."_comments WHERE comment_ID = ".$comment->comment_ID);

  }
  else
    $prev = $comment;
}
2 голосов
/ 24 июля 2011

Напишите простой PHP-скрипт для очистки таблицы комментариев (но сделайте резервную копию, прежде чем сделать это).

Псевдокод:

// получить все комментарии

// сравнить каждый комментарий с каждым комментарием

// если содержание комментария одинаково (или сравнивать все значения, кроме идентификатора, если вы хотите быть уверенным, что ничего не сломано), удалите комментарий с более высоким идентификатором

Это будет примерно так:

global $wpdb;

$comments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."_comments");

foreach($comments as $comment) {

foreach($comments as $compare) {

if(($comment->comment_content == $compare->comment_content) && ($comment->comment_ID != $compare->comment_ID )) { // add maybe other rules here

$wpdb->query("DELETE FROM ".$wpdb->prefix."_comments WHERE comment_ID == $compare->comment_ID");

}

}

Не проверено, поэтому используйте и улучшайте осторожно ...

База данных с таблицей комментариев: http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...