В итоге получился вот такой запрос...
public function set_rating($id, $ip, $time, $mark) { $query = DB::query(Database::SELECT, 'SELECT COUNT(id) AS count FROM '. $this->_tableRatingIp .' WHERE id = :id AND TO_DAYS(NOW()) - TO_DAYS(`time`)<= 1') ->param(':id', $id) ->execute()->as_array(); if($query[0]['count'] == 0) { $query = DB::query(Database::SELECT, 'SELECT mark FROM '. $this->_tableRating .' WHERE id = :id') ->param(':id', $id) ->execute()->as_array();
if($query) { DB::query(Database::UPDATE, 'UPDATE '. $this->_tableRating .' SET mark = mark + :mark WHERE id = :id') ->parameters(array( ':mark' => $mark, ':id' => $id, )) ->execute(); } else { DB::query(Database::INSERT, 'INSERT INTO '. $this->_tableRating .' (id, mark) VALUES (:id, :mark)') ->parameters(array( ':id' => $id, ':mark' => $mark )) ->execute(); }
DB::query(Database::INSERT, 'INSERT INTO '. $this->_tableRatingIp .' (id, ip, time) VALUES (:id, :ip, :time)') ->parameters(array( ':id' => $id, ':ip' => $ip, ':time' => $time )) ->execute(); } }
и
public function render($id) { $rating_mark = Arr::get($_POST, 'rating_mark'); if($rating_mark) { if($rating_mark == 1 || $rating_mark == -1) { $ip = mysql_escape_string($_SERVER['REMOTE_ADDR']); $time = date('Y-m-d [H:i:s]'); $rating = Model::factory('Rating')->set_rating($id, $ip, $time, $rating_mark); } } $rating = Model::factory('Rating')->get_rating($id);
if($rating_mark) echo $rating; else { $view = $this->config['view']; return View::factory($view) ->set('id', $id) ->set('rating', $rating); } }
|