【问题标题】:MySQL - Skip Duplicate WordPress EntriesMySQL - 跳过重复的 WordPress 条目
【发布时间】:2008-11-20 19:04:30
【问题描述】:

我正在编写一个脚本来显示 10 个最近“活跃”的 WordPress 博客文章(即那些具有最新 cmets 的文章)。问题是,该列表有很多重复项。我想清除重复项。有没有一种简单的方法可以通过更改 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' );
}
?>

【问题讨论】:

  • 我对描述感到困惑。这个对吗?您正在查找最近评论的十个不同帖子中每一个的最新评论的详细信息。

标签: php mysql wordpress


【解决方案1】:

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

【讨论】:

  • DISTINCT 只要comment_ID 是选定字段之一就没有帮助,因为它是主键。
【解决方案2】:

我以为我已经使用 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 的多个结果,该行将不会是不同的。事实上, distinct 不是必需的,只需 GROUP BY。"

还在寻找....

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2012-04-12
    • 2012-04-12
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多