仅使用1个查询增加视图表?

时间:2012-01-29 14:45:55

标签: php mysql codeigniter activerecord

是否有办法为某些内容增加视图表,或者如果它不存在,则添加第一个视图而不运行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 个答案:

答案 0 :(得分:1)

您可以使用重复键来实现此目的,如下所示:

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

希望这会有所帮助:)

答案 1 :(得分:0)

我不确定您使用的是什么数据库包装器,但是,您基本上想要执行以下单个SQL语句:

UPDATE table SET column = column + 1 WHERE id = ...;