WordPress - 人気記事一覧修正!
Updated:
以前、WordPress のアクセス統計プラグイン「CounterizeII」を使って人気記事一覧を表示する方法(SQL)を紹介しました。
(「CounterizeII」を弄ったことのある方なら、テーブル名・フィールド名に馴染みがあると思います)
しかし、考え方を間違えていたことが発覚!
- 【誤】過去30日以内に投稿された記事のアクセス数を集計
- 【正】過去30日以内にアクセスのあった記事のアクセス数を集計
使用するSQLを修正しました。
SQL文の修正
- 【誤】過去30日以内に投稿された記事のアクセス数を集計
SELECT B.postID, A.post_title, B.CNT
FROM `wp_posts` AS A
INNER JOIN
( SELECT postID, SUM( count ) AS cnt
FROM `wp_Counterize_Pages`
GROUP BY postID ) AS B
ON A.ID = B.postID
WHERE B.postID IS NOT NULL AND A.post_date > date_add( now(), interval - 30 day )
ORDER BY B.cnt DESC
LIMIT 10
- 【正】過去30日以内にアクセスのあった記事のアクセス数を集計
SELECT B.postID, A.post_title, B.CNT
FROM `wp_posts` AS A
INNER JOIN
( SELECT BC.postID AS postID, COUNT(*) AS CNT
FROM ( SELECT BA.pageID AS pageID, BB.postID AS postID
FROM ( SELECT timestamp, pageID
FROM `wp_Counterize`
WHERE timestamp > date_add( now(), interval - 30 day )
) AS BA
INNER JOIN
`wp_Counterize_Pages` AS BB
ON BA.pageID = BB.pageID ) AS BC
GROUP BY BC.postID ) AS B
ON A.ID = B.postID
ORDER BY B.cnt DESC
LIMIT 10
functions.php の修正
関数の使い方は WordPress - CounterizeIIから人気記事リスト取得関数作成! を参照してください。
- 【誤】
function most_popular_post( $cnt, $days = 0 ) {
global $wpdb;
if ( $days == 0 ) {
$day_opt = "";
} else {
$day_opt = " AND A.post_date > date_add( now(), interval -" . $days . " day )";
}
$sql = "SELECT B.postID, A.post_title, B.CNT "
. " FROM `wp_posts` AS A "
. " INNER JOIN "
. " ( SELECT postID, SUM( count ) AS cnt "
. " FROM `wp_Counterize_Pages` "
. " GROUP BY postID ) AS B "
. " ON A.ID = B.postID "
. " WHERE B.postID IS NOT NULL " . $day_opt
. " ORDER BY B.cnt DESC "
. " LIMIT ". $cnt;
$res = $wpdb->get_results( $sql, ARRAY_N );
return $res;
}
- 【正】
function most_popular_post( $cnt, $days = 0 ) {
global $wpdb;
if ( $days == 0 ) {
$day_opt = "";
} else {
$day_opt = "WHERE timestamp > date_add( now(), interval - " . $days . " day ) ";
}
$sql = "SELECT B.postID, A.post_title, B.CNT "
. " FROM `wp_posts` AS A "
. " INNER JOIN "
. " ( SELECT BC.postID AS postID, COUNT(*) AS CNT "
. " FROM ( SELECT BA.pageID AS pageID, BB.postID AS postID "
. " FROM ( SELECT timestamp, pageID "
. " FROM `wp_Counterize` "
. " " . $day_opt
. " ) AS BA "
. " INNER JOIN "
. " `wp_Counterize_Pages` AS BB "
. " ON BA.pageID = BB.pageID ) AS BC "
. " GROUP BY BC.postID ) AS B "
. " ON A.ID = B.postID "
. " ORDER BY B.cnt DESC "
. " LIMIT ". $cnt;
$res = $wpdb->get_results( $sql, ARRAY_N );
return $res;
}
修正結果は、このブログのサイドバーでご確認いただけます。
ついでに、Ruby on Rails 製のホームページで公開している統計も修正した。 ※上記で【誤】としているものを「投稿日時ベース」として、【正】としているものを「アクセス日時ベース」として閲覧できるようにした。
以上。
Comments