Php MySQL обновляет столбец только в том случае, если IP является новым

Я пытаюсь сделать мой скрипт обновлять кол-во просмотров на +1 каждый раз, когда IP является новым. и после 604800 секунд, если один и тот же пользователь (тот же IP) возвращается снова через 604800 секунд, просмотрите счет на + 1. Может кто-то помочь мне здесь.

//Get video id $id = $_GET['id']; //Get video title $videoName = $_GET['idtitle']; //Connect to database $pdo = new PDO('mysql:host=localhost;dbname=videodb', 'root', ''); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Get user IP $ip = $_SERVER["REMOTE_ADDR"]; //Insert that user IP, Name, Title and increase view count by +1 //This is what i want to accomplish but is not working! $insert = $pdo->query("INSERT INTO `videodb`.`videos` ( `ip`, `name`, `title`, `views`) VALUES ('$ip', '$id', '$videoName', `views`+1)"); 

// Образец два

 //Select the IP from videos $select = $pdo->prepare("SELECT `ip` FROM `videos`"); $sql = $select->execute(); while ($row = $select->fetch(PDO::FETCH_ASSOC)) { //If the IP in database is not equal to the user IP in database views +1 if($row->fetch('ip') == $ip){ $pdo->query("UPDATE videos SET `views` = `views`+1 WHERE id = '$id' "); }} 

Добавьте еще один столбец в таблицу как last_viewed_at DATETIME.

Теперь перед вставкой записи в базу данных:

Когда вы проверяете запись за последние 7 дней, выполните запрос, как показано ниже:

 $row = "SELECT * FROM videos WHERE id = 'users.ip.to.check'"; 

Условия: У вас есть запись против users.ip.to.check теперь проверьте, не отличается ли разница во времени более 7 дней. означает.

 if (count($row) > 0) { $ipLastViewAt = new \DateTime($row['last_viewed_at']); $currentDate = new \DateTime(); $diff = $currentDate->diff($ipLastViewAt)->format("%a"); if ($diff >= 7 ) { // update the record with the view + 1 and with last_view_at = currentDateTime; } } else { // Insert the record with the view +1 and with last_view_at = currentDateTime; } 

Если Ip является уникальным полем, этот запрос должен помочь

 INSERT INTO `videodb`.`videos`( `ip`, `name`, `title`, `views`) VALUES ('$ip', '$id', '$videoName', 1) ON DUPLICATE KEY UPDATE `views`=views+1; 

не полный код, просто для вашей информации!

Советы: два стола могут быть лучше, один сохранить видео информацию, другой сохранить информацию о посетителях

 videos:id,ip,name,title,views,update_time // first, select $video info and get the result --- "select * from videos where ip='{$ip}' and id='{$id}'"; // we got $video look like : array('id'=>1,'update_time'=>'1453970786') $time = time(); if( isset($video['id']) && (($time - $video['update_time']) >= 604800) ){ $pdo->query("UPDATE `videodb`.`videos` SET `views`=`views`+1 AND update_time='$time' WHERE id = '$id'"); }elseif( !isset($video['id']) ){ $pdo->query("INSERT INTO `videodb`.`videos`( `ip`, `name`, `title`, `views`) VALUES ('$ip', '$id', '$videoName', 1)"); }