我正在编写一个脚本来显示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' );
}
?>
答案 0 :(得分:3)
查看SELECT语句的DISTINCT选项。或者也可以使用GROUP BY语法(查看相同的链接)。虽然它们以不同的方式工作,但这些方法最有可能帮助您获得所需的两种方法。
答案 1 :(得分: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。“
仍在寻找......