2012-03-15 18 views
0

私はPHPでブログシステムを作成しようとしています。過去21日間に最も多く閲覧された投稿を数える方法が必要です。誰かがこれを行う良い方法を知っていますか?最近21日間に最も多く閲覧された投稿

私はPHPで多くの経験がないので、私は正しい方向に私を指す人が必要です。私はGoogleのanlytics APIを調べようとしましたが、少し複雑に思えます。クッキーを使うのは簡単でしょうか?

+1

質問をする際にもう少し努力する必要があります。あなたのテーブルの構造は何ですか?何を試しましたか?膨大な数のチュートリアルとこのトピックを扱うブログ記事があります。 – nnichols

答えて

1

は、あなた自身のブログシステムを構築しているので、ここでそれを行うための最も簡単な方法です。 IP記録されたレコードを持っている場合は、ビジネスロジックを調整する必要があります。

  1. visitsという新しいテーブルを作成します。
  2. id(プライマリキー)、blogpostidというフィールド(表示されているポストのIDを格納する)、およびdtpostというフィールドをタイムスタンプまたはdatetimeのプロパティとともに追加します。

今、あなたは次のように問い合わせることができます:あなたは本当にあなたのブログの記事を訪問し、誰かの日時を記憶しているん何

select visits.blogpostid, count(dtpost) as counted from posts 
left join posts on posts.id = visits.blogpostid 
where dtpost between (NOW() AND <-21 days interval function>) 
order by counted DESC group by visits.blogpostid; 

。これは自動的にカウントなので、間隔を置いて間に置くとデータ*が取り出されます。 count()関数はカウントを行います。

知っておくべきことは、自分のブラウザの最新表示が訪問回数を加算することです。そのため、ブラウザの更新回数をカウントする方法を提供する必要があります(通常は時間制限またはあなたはすでにそのページを見てきました)。

*編集: これはあいまいなので、希望する期間内にデータを取得するということです。

0

IDをポストするための外部キーを使用してテーブルviewsを作成し、訪問者情報と日付のエントリを追加します。そして、あなたは(未テスト)は、このような最も見られた記事を取得することができます:

SELECT p.*, COUNT(p.*) count FROM posts p 
INNER JOIN views v ON v.post_id = p.id 
WHERE DATE_SUB(CURDATE(), INTERVAL 21 DAY) <= p.date_viewed 
ORDER BY count DESC 
GROUP BY p.id; 
+0

テーブルにデータを追加するときは、ボットを除外して、ユニークな投稿ビューや生の投稿ビューを追跡することを忘れないでください。 – Endijs

0

あなたが起きてからそれを防ぐために、セッションmeganismを使用することができ、同じユーザーが複数回見たときにインクリメントからのカウントを防ぐために。

私はこれがあなたのブログの記事の訪問の匿名のカウントがあることを前提としています

session_start(); 

if (!isset($_SESSION['posts_viewed'])) { 
    $_SESSION['posts_viewed'] = array(); 
} 

// some logic to get to relevant post id here 

// check that the post_id is not in the array 
if (!in_array($post_id, $_SESSION['posts_viewed'])) { 

    // logic to increment a persistent counter (e.g. in mysql) here 

    // add post_id to array 
    array_push($_SESSION['posts_viewed'], $post_id); 
} 

// finally some logic that display the post here 

session_close(); 
関連する問題