2

我正在编写一个脚本来显示 10 个最近“活跃”的 WordPress 博客文章(即那些具有最新评论的文章)。问题是,该列表有很多重复项。我想清除重复项。有没有一种简单的方法可以通过更改 MySQL 查询(如 IGNORE、WHERE)或其他方式来做到这一点?这是我到目前为止所拥有的:

<?php

function cd_recently_active() {
    global $wpdb, $comments, $comment;
    $number = 10; //how many recently active posts to display? enter here

if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
    $comments = $wpdb->get_results("SELECT comment_date, comment_author, comment_author_url, comment_ID, comment_post_ID, comment_content FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT $number");

    wp_cache_add( 'recent_comments', $comments, 'widget' );
}
?>
4

2 回答 2

3

查看 SELECT 语句的DISTINCT选项。或者使用 GROUP BY 语法(查看相同的链接)。尽管它们以不同的方式工作,但这两种方法最有可能帮助您获得您想要的东西。

于 2008-11-20T19:10:43.117 回答
0

我以为我已经使用 GROUP BY 解决了这个问题,但现在我不太确定。这是代码:

    if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
    $comments = $wpdb->get_results("SELECT comment_post_ID, comment_author, comment_date FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID ORDER BY comment_date_gmt DESC LIMIT $number");
    wp_cache_add( 'recent_comments', $comments, 'widget' );
}

唯一的变化是添加 GROUP BY comment_post_ID (我想要唯一的字段)。不幸的是,这“破坏”了功能;它被冻结并且不更新。

我也无法让 DISTINCT 工作。我正在跟进以解决此问题的一条评论来自http://www.webmasterworld.com/forum88/9204.htm

特别是,ergophobe 的评论 #:1259236 说:“您遗漏了 GROUP BY。没有它,您将获得给定 topic_id b/c 的多个结果,该行将不会是不同的。事实上,不同的不是必需的,只是 GROUP BY。

还在寻找....

于 2008-11-20T21:56:54.530 回答