Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何通过在批更新中增加值来更新字段_Mysql_Codeigniter - Fatal编程技术网

Mysql 如何通过在批更新中增加值来更新字段

Mysql 如何通过在批更新中增加值来更新字段,mysql,codeigniter,Mysql,Codeigniter,到目前为止,我已经尝试过如下更新余额表。它很好用 $values = array( array('id'=>10,'c1'=>101), array('id'=>11,'c1'=>102) ); $this->db->update_batch('balance',$values,'id'); 我想知道如何在更新批处理数组中更新字段值=以前的值+新值,即c1=c1+101。我发现 $this->db->set('c1','c1+101',FAL

到目前为止,我已经尝试过如下更新余额表。它很好用

$values = array(
    array('id'=>10,'c1'=>101),
    array('id'=>11,'c1'=>102)
);
$this->db->update_batch('balance',$values,'id');
我想知道如何在更新批处理数组中更新字段值=以前的值+新值,即c1=c1+101。我发现

$this->db->set('c1','c1+101',FALSE)

会有帮助的。但我不知道如何在批处理操作中使用它

我已经尝试了数组('id'=>10,'c1'=>'c1+101'),但它不起作用。

你试试这个

$this->db->set('c1', 'c1+101', FALSE)


是的,您也可以使用更新批处理来完成此操作

$data = [
         [
           'id' => 10 ,
           'c1' => '(c1+101)' ,
         ],
         [
          'id' => 11,
          'c1' => '(c1+102)' ,
         ]
    ];
   $this->db->set_update_batch($data,'id',FALSE);
   $this->db->update_batch('mytable',null,'id');
生成的查询:

UPDATE `mytable` SET c1 = CASE 
    WHEN id = 10 THEN (c1+101)
    WHEN id = 11 THEN (c1+102)
  ELSE c1 END
WHERE id IN(10,11)

这两种说法到底有什么不同。不受影响的迹象?
UPDATE `mytable` SET c1 = CASE 
    WHEN id = 10 THEN (c1+101)
    WHEN id = 11 THEN (c1+102)
  ELSE c1 END
WHERE id IN(10,11)