2011-06-25 10 views
2

私は過去1週間に投稿にコメントを付けるためにwpdbのクエリを実行しようとしています...私が間違っていることは何ですか?WordPress過去7日間で最もコメントの多い投稿のためのカスタムクエリ

$querystr = "SELECT comment_count, ID, post_title 
     FROM $wpdb->posts wposts, $wpdb->comments wcomments 
     WHERE wposts.ID = wcomments.comment_post_ID 
     AND wcomments.comment_date >= CURDATE() - 7 
     GROUP BY wposts.ID 
     ORDER BY comment_count DESC 
     LIMIT 0 , 10 
"; 

$pageposts = $wpdb->get_results($querystr); 

クエリには、過去1週間でコメントされたトップのコメント投稿の代わりに、すべての時間のトップコメント記事が表示されるようです。

ありがとうございます。

答えて

1

Lonut、日付範囲の問題の世話をすると、ほとんどのコメントが、それは文句を言わないを選択にコメントしただけ最もコメントの投稿過去のX時間間隔で。

これはそれを行う必要があります。

$querystr = "SELECT comment_count, ID, post_title 
     FROM $wpdb->posts wposts, $wpdb->comments wcomments 
     WHERE wposts.ID = wcomments.comment_post_ID 
     AND wposts.post_status='publish' 
     AND wcomments.comment_approved='1' 
     AND wcomments.comment_date > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 WEEK) 
     GROUP BY wposts.ID 
     ORDER BY comment_count DESC 
     LIMIT 0 , 10 
"; 

EDIT:日付のフィルターWEEKにYEARからの助けを

+0

良い読み解ジャック。すべての助けをありがとう! – rpophessagr

+1

by order byは、コメントテーブルの列である 'comment_count'です。この列の値は、where句の他の条件によって変わりません。私は日付、ステータス、または承認されたフィルタがカウントに影響するとは期待していません。彼らは投稿を除外します。 – Andomar

+0

良い点ですが、コメントカウントは承認されたコメントの数に基づいてWordPressエンジンによって設定されます。ステータスと承認されたフィルタは、コメントされているがまだ承認されていない投稿が除外されるように配置されています。 – jackreichert

2

これは動作するはずです:あなたはpostsテーブルのcomment_countフィールドで注文している

global $wpdb; 
$querystr = $wpdb->get_results("SELECT comment_count, ID,post_title 
    FROM $wpdb->posts 
    WHERE 
    post_status='publish' AND 
    post_date > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 WEEK) 
    ORDER BY comment_count DESC 
    LIMIT 0 , 10"); 
+0

感謝を変更...ほとんど...ジャックの答えを参照してください。 – rpophessagr

1

。グループのために一致した意見の数に注文してみてください。

ORDER BY count(*) desc 
関連する問題