2

最近「アクティブな」WordPress ブログ記事 (つまり、最新のコメントがある記事) 10 件を表示するスクリプトを作成しています。問題は、リストに多くの重複があることです。重複を排除したいと思います。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 構文 (同じリンクを見てください)。これらはさまざまな方法で機能しますが、必要なものを正確に取得するのに最も役立つ可能性が高い 2 つの方法です。

于 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を機能させることができませんでした。これを理解するために私がフォローアップしている1つのコメントは、http://www.webmasterworld.com/forum88/9204.htmからのものです。

特に、ergophobeによるコメント#:1259236は、「GROUP BYを省略しました。これがないと、特定のtopic_id b / cに対して複数の結果が得られ、行は区別されません。実際、区別する必要はありません。 GROUPBYだけです。

まだ探しています...

于 2008-11-20T21:56:54.530 に答える