2017-02-22 2 views
-1

У меня есть таблица 'viewlogs', которая формируется из трех полей: ViewLogId, VideoId и UserId. ViewLogId имеет первичный ключ и значение AUTO_INCREMENT. Когда пользователь смотрит видео, его значение увеличивается. Когда пользователь смотрит одно и то же видео, увеличивается viewLogId, но я хочу, чтобы это значение увеличивалось только один раз и однозначно. Как исправить эту проблему. Я прикрепил картину стола.Количество просмотров для каждого пользователя

Image

Я использовал следующий код PHP для обновления view_counts в «видео» таблицы. Вышеприведенное изображение относится к таблице viewlogs.

public function updateStatistics($videoId, $fieldName, $userId) 
{ 
    $this->db->reconnect(); 
    $this->db->trans_begin(); 
    $this->db->query("UPDATE videos SET {$fieldName}={$fieldName}+1 WHERE VideoId=?", array($videoId)); 
    if ($fieldName == "ViewCount" && $userId > 0) { 
     $this->db->insert('viewlogs', array('UserId' => $userId, 'VideoId' => $videoId, 'ViewDateTime' => date('Y-m-d H:i:s'))); 
    } 
    if ($this->db->trans_status() === false) { 
     $this->db->trans_rollback(); 
     return false; 
    } else { 
     $this->db->trans_commit(); 
     return true; 
    } 
    return false; 
} 
+2

Не могли бы вы подробнее рассказать о проблеме? потому что здесь нет проблемы – nilesh

+0

Возможный дубликат [Как вставить, если не существует "в MySQL?] (http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in- mysql) – JNevill

+0

@nilesh Я хочу, чтобы ViewLogId для того же UserId с тем же VideoId не был изменен. – RoboticEng

ответ

0

Я решил проблему, просто нужно проверить user_id и video_id перед обновлением вида.

public function updateStatistics($videoId, $fieldName, $userId) 
{ 
    $this->db->reconnect(); 
    $this->db->trans_begin(); 

    $sql = "SELECT * FROM viewlogs WHERE UserId ={$userId} AND VideoId ={$videoId}"; 
    $query = $this->db->query($sql); 
    $result = $query->result_array(); 
    if (empty($result)){ 
     $this->db->query("UPDATE videos SET {$fieldName}={$fieldName}+1 WHERE VideoId=?", array($videoId)); 

     if ($fieldName == "ViewCount" && $userId > 0) { 
      $this->db->insert('viewlogs', array('UserId' => $userId, 'VideoId' => $videoId, 'ViewDateTime' => date('Y-m-d H:i:s'))); 
     } 
    } 
    if ($this->db->trans_status() === false) { 
     $this->db->trans_rollback(); 
     return false; 
    } else { 
     $this->db->trans_commit(); 
     return true; 
    } 
    return false; 
} 
Смежные вопросы