2008-11-20 56 views
1

我正在編寫一個腳本來顯示10個最近「活躍」的WordPress博客文章(即那些有最新評論的文章)。問題是,該列表有很多重複。我想清除重複項。有沒有一種簡單的方法來通過改變MySQL查詢(如IGNORE,WHERE)或其他方式來做到這一點?這是我到目前爲止有:MySQL - 跳過重複的WordPress條目

<?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

我被描述混淆。它是否正確? 您正在尋找最近評論過的10個不同帖子中每個帖子的最新評論的詳細信息。 – Oddthinking 2008-11-30 23:20:48

回答

3

看那DISTINCT選擇SELECT語句。或者也可以使用GROUP BY語法(查看相同的鏈接)。雖然他們以不同的方式工作,但這些將是最有可能幫助您獲得您想要的東西的兩種方法。

+0

只要comment_ID是所選字段之一,DISTINCT就無濟於事,因爲它是主鍵。 – Powerlord 2008-11-21 18:34:32

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。

還在尋找....