【问题标题】:Mysql Query to Delete Duplicate Wordpress Comments?Mysql 查询删除重复的 Wordpress 评论?
【发布时间】:2011-10-11 19:01:27
【问题描述】:

我遇到了 Disqus 的问题,它在许多帖子上创建了重复的 cmets,有时同一评论有 4 个重复。我一直在尝试手动删除这些,但我们总共有超过 1 万个 cmets,不幸的是,这只是偶然发生的,它只发生在一些帖子上。所以...

有谁知道 mysql 查询,我可以通过搜索与评论本身或作者匹配的条目来检测和删除重复的 cmets?评论 ID 不重复(它为每个评论创建了新的评论 ID),所以我不确定如何在 mysql 中执行此操作(加上我不太擅长它:-)...任何帮助将不胜感激。谢谢。

【问题讨论】:

标签: mysql wordpress


【解决方案1】:

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

【讨论】:

  • 这很好,但是您查询中的引用存在问题。如果您使用查询修复该行,它会完美运行: $wpdb->query("DELETE FROM ".$wpdb->prefix."_cmets WHERE comment_ID == ".$comment->comment_ID);
  • Russell,感谢您的校对。 :) 我按照你的建议编辑了代码
  • 虽然我发现它只对某些帖子有效。我相信它可能只对当前页面上显示的帖子运行查询。因此,如果您的主页上仅显示 25 个帖子,则不会运行旧帖子的查询。我还没有找到解决它的方法,尽管我没有尝试过。我想您可以将所有帖子显示在一个页面上,并在需要时运行相同的查询。
  • 这一行需要从: $wpdb->query("DELETE FROM ".$wpdb->prefix."_cmets WHERE comment_ID == " 改为 $wpdb->query("DELETE FROM ".$wpdb->prefix."_cmets WHERE comment_ID = " IE 双"==" 应该只是一个"="
  • @j-man86,你是对的。在我的辩护中,我修改了另一个答案的代码,该答案也使用'=='代替了'='。 '==' 是所有 PHP、JavaScript 等的习惯。无论如何,我已经更正了这一行。
【解决方案2】:

编写一个简单的 PHP 脚本来清理您的 cmets 表(但在执行之前进行备份)。

伪代码:

//获取所有的cmets

//将每条评论与每条评论进行比较

//如果评论的内容相同(或者比较除id之外的所有值,如果你想确保没有任何东西被破坏),删除id较高的评论

会是这样的:

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

}

}

未经测试,因此请谨慎使用和改进...

带有 cmets 表的数据库:http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png

【讨论】:

  • 谢谢。我想我在这里找到了一个很好的答案 - scriptygoddess.com/archives/2010/05/21/…
  • 我认为也是一个很好的解决方案。这就是您在 SQL/phpmyadmin 中的操作方式,可能更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多