【问题标题】:Delete Duplicate Rows in MySQL (Wordpress, Comments)删除 MySQL 中的重复行(Wordpress、评论)
【发布时间】:2015-10-08 16:08:20
【问题描述】:

我的 Wordpress 数据库中有大量重复的 cmets,特别是表 wp_cmets。当然,这些 cmets 有不同的 ID。我现在想根据字段 comment_date 对这些 cmets 进行重复数据删除,该字段将识别在同一日期和时间发布的所有 cmets。我不在乎保留哪一个重复项。

我必须使用什么 SQL 查询来实现这一点?

谢谢!

编辑:我不想删除表格中的特定评论日期,而是希望数据库扫描重复的日期并只保留一个条目。

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

    您可以执行全选查询,然后遍历这些查询。在循环中执行一个查询,删除任何相同且没有当前索引 ID 的内容。先备份。

    更新:

    我更喜欢将这类代码保存在根目录下的单独文件中。

    所以在根目录下创建一个新文件,然后随心所欲地调用它,然后添加此代码。备份评论和评论元表后运行文件。

    You could do a select all query and then loop through those. While in the loop do a query that  delete anything that is the same and doesn't have the ID of current index. Backup first.
    

    更新:

    我更喜欢将这类代码保存在根目录下的单独文件中。

    所以在根目录下创建一个新文件,然后随心所欲地调用它,然后添加此代码。备份评论和评论元表后运行文件。

    <?php 
    require('./wp-load.php');
    global $wpdb; // loads the DB object
    
    $comments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."comments");
    
    foreach((array)$comments as $key => $comment)
    {
        $id_to_check = $comment->comment_ID; // keep this comment ID
        $get_dupes = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."comments WHERE comment_content = '".$comment->comment_content."' AND comment_ID != $id_to_check OR comment_date = '".$comment->comment_date."' AND comment_ID != '".$id_to_check."' ");
    
        foreach((array)$get_dupes as $dkey => $dupe)
        {
             $wpdb->query("DELETE FROM ".$wpdb->prefix."commentmeta WHERE comment_id = '".$dupe->comment_ID."'"); // delete duplicate comment meta
        }
    
        $wpdb->query("DELETE FROM ".$wpdb->prefix."comments WHERE comment_ID = '".$dupe->comment_ID."'"); // delete duplicate comment
    
    }
    echo 'all done!'
    ?>
    

    【讨论】:

    • 我该怎么做?对不起,这里的菜鸟:)
    • 这给了我一个错误:致命错误:在第 5 行的 /delete_cmets.php 中调用未定义的方法 W3_Db::get_rows()。此外,这是否查看 comment_content 或 comment_date?还是两者兼而有之?
    • 这似乎执行得很好,但是仍然存在重复的 cmets。也许是因为它正在寻找comment_content 而不是comment_date?可能是comment_content略有不同,但日期还是一样。
    • 也添加了日期。再试一次。在黑暗中拍摄,因为我无法获取您的表格数据。
    【解决方案2】:

    第一个计数 cmets ...

    example : SELECT COUNT(*) FROM wp_comments WHERE comment_date='blahblah'

    然后将结果存储在变量中...例如 $comment_count 那么……

    DELETE FROM wp_comments WHERE comment_date='blahblah' LIMIT N 

    将 N 替换为 $comment_count-1

    【讨论】:

    • 好的,我不想删除表格中的特定评论日期,而是希望数据库扫描重复的日期并只保留一个条目。
    • 但这需要我知道所有重复的日期,不是吗?
    • 其实……没有。在循环中检查 $comment_count 是否大于 1!
    • 对不起,如果我需要在这里被喂食。我想我必须将它添加到我的functions.php?
    • 我不是 wordpress 开发者,而是 php 开发者。所以如果你问我......你可以把代码放在你想要的任何地方!重点是正确连接数据库
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2011-08-19
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多