Поле приращения базы данных mysql с использованием синтаксиса активной записи codeigniter
У меня есть следующий php-codeigniter script, который пытается увеличить поле записи с использованием синтаксиса активной записи:
$data = array('votes' => '(votes + 1)');
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
В результате создается следующий SQL:
"UPDATE
Пользователи SET
голосов = '(votes + 1)' WHERE
ID = '44'
"
Что не запускается, но этот SQL делает то, что я ищу:
"UPDATE
пользователи SET
vote = (votes + 1) WHERE
id = '44'
"` < - Обратите внимание на отсутствие цитат вокруг (голосов + 1)
Кто-нибудь знает, как реализовать этот тип запроса с синтаксисом активной записи codeigniter?
Ответы
Ответ 1
Вы можете сделать следующее:
$this->db->where('id', $post['identifier']);
$this->db->set('votes', 'votes+1', FALSE);
$this->db->update('users');
Причина этого в том, что третий (необязательный) FALSE-параметр сообщает CodeIgniter не защищать сгенерированный запрос с обратными выводами ('
). Это означает, что сгенерированный SQL будет:
UPDATE users SET votes= votes + 1 WHERE id= '44'
Если вы заметили, обратные ссылки удаляются из '(votes+1)'
, что дает желаемый эффект увеличения атрибута голосов на 1.
Ответ 2
$data = array('votes' => 'votes + 1');
foreach ($data as $key=>$val) {
$this->db->set($key, $val, FALSE);
}
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
Ответ 3
Вы можете сделать, как указано ниже:
public function increament_product_count(){
$product_id=$this->input->post('product_id');
$this->db->where('id', $product_id);
$this->db->set('click_count', 'click_count+1', FALSE);
$this->db->update('tbl_product');
}