我在Disqus上遇到了一个问题,即它在很多帖子上创建了重复的评论,有时候是同一评论的4个重复评论。我一直在尝试手动删除这些,但我们总共有超过10K的评论,不幸的是,这发生在偶然的情况下,它只发生在一些帖子上。所以......
有没有人知道一个mysql查询,我可以通过搜索与评论本身或作者相匹配的条目来检测和删除重复的评论?注释ID不重复(它为每个创建了新的注释ID)所以我不知道如何在mysql中执行此操作(加上我不是很擅长: - )...任何帮助将不胜感激。谢谢。
答案 0 :(得分:3)
改进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;
}
答案 1 :(得分:2)
编写一个简单的PHP脚本来清理注释表(但在执行之前进行备份)。
伪代码:
//获取所有评论
//将每条评论与每条评论进行比较
//如果评论的内容相同(或者比较除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");
}
}
未经测试,因此小心使用和改进......
带有评论表的数据库:http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png