Увеличить таблицу представлений всего за 1 запрос? - PullRequest
0 голосов
/ 29 января 2012

Есть ли способ увеличить таблицу представлений для некоторого содержимого или, если она не существует, добавить первое представление без выполнения 2 запросов. Вот мой текущий код, который работает.

function increment_views($id = null) {

  if ($id !== NULL) {
    $record = array('id' => $id, 'views' => 'views+1');
    // check exists
    $query = $this->db->get_where('views', array('id' => $id), 1, 0);
    if ($query->num_rows() == 0) {
      // if !exists, insert
        $db_view_data = array(
        'id' => $id,
        'views' => '1'
        );
        $this->db->insert('views', $db_view_data);
    } else {
      // A record does exist, update it.
      $this->db->where('id', $id);
      $this->db->set('views', 'views+1', false);
      $this->db->update('views');

    }
    // check it worked
    if ($this->db->affected_rows() > 0) {
      return true;
    }
    return false;
  }
  return false;
}  

Ответы [ 2 ]

1 голос
/ 29 января 2012

Вы можете добиться этого, используя дубликат ключа следующим образом:

$query = "INSERT into views(id,views)values($id,1) on DUPLICATE KEY UPDATE views=views+1;

Надеюсь, это поможет:)

0 голосов
/ 29 января 2012

Я не уверен, какую оболочку БД вы используете, однако, вы в основном хотите выполнить следующую единственную инструкцию SQL:

UPDATE table SET column = column + 1 WHERE id = ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...