アプリケーションはZend Framework 1.12
で書かれています。 マイ動画はurl
の下で利用可能です:各ビデオのユニークなビューを数える方法
test.com/videos/video/id/1
test.com/videos/video/id/2
test.com/videos/video/id/3
...
。 各動画の再生回数をカウントしたい(一意)。
public function videoAction() {
$video_id = $this->_getParam('id', 0);
$hits = new Application_Model_DbTable_Hits();
$hit = $hits->fetchRow($hits->select()->where('belongs_to_video = ?', $video_id));
if (!isset($_SESSION['views']) || !($_SESSION['views'] == $video_id){
$_SESSION['views'] = $video_id;
$newViews = $hit->count + 1;
$data = array('count' => $newViews,);
$hits->update($data);
}
}
それは動作しますが、しかし、ない正しい方法で:VideosController
で
マイビデオアクションは次のようになります。特定のビデオビューを訪問した後に(サイトをリフレッシュした後)、別のビューにも行った後に(サイトをリフレッシュした後)上昇しますが、最初のものに戻った後、再び上昇します。
助けてください。
なぜあなたはセッションでビューを保持していますか? – Naincy
本当にセッションはこれには適していません。あなたはvideo_id、ip、datetime ..を保存するテーブル "view"が必要です。このクエリを使ってビデオごとに一意のビュー(一意のIP)を選択できるとき 'SELECT video_id、COUNT(DISTINCT ip )ビューからGROUP BY video_id ORDER BY video_id' –