我有桌子' viewlogs'它由三个字段组成:ViewLogId
,VideoId
和UserId
。 ViewLogId
具有主键和AUTO_INCREMENT
值。当用户观看视频时,其值会递增。当用户观看同一视频时viewLogId
递增,但我希望此值仅增加一次且唯一。我该如何解决这个问题。我附上了表格。
我使用以下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;
}
答案 0 :(得分: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;
}