我正在使用codeigniter update_batch
函数。
我想将数组作为第三个参数(where子句)传递给update_batch
。
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
而不是:
$this->db->update_batch('mytable', $data, 'title');
我想这样做:
$this->db->update_batch('mytable', $data, array('title','name'));
添加条件的多个。
这可能吗?
答案 0 :(得分:0)
您可以通过在模型Test_model中创建批量更新方法来执行此操作,例如,因为Codeigniter不支持本机update_batch中的多个where条件,因此下面的示例:
public function update_batch_custom($table_name, $data, $indexes) {
if (empty($data) || empty($indexes)){
return 'Data or indexes must not be empty';
}
$db = $this->load->database('test_db', TRUE);
$sql = 'UPDATE ' . $table_name . ' SET ' . "\n";
//columns on which is done actual update
$columns = [];
foreach ($data[0] as $key => $value) {
if (!in_array($key, $indexes)){
$columns[] = $key;
}
}
/*
* forming WHEN .. THEN sql parts and WHERE condition
*/
$parts = [];
$where = [];
foreach ($data as $row) {
foreach ($columns as $column) {
$sql_part = ' WHEN (';
foreach ($indexes as $index) {
$sql_part .= $index . '= \''.$row[$index] . '\' AND ';
$where[$index][] = $row[$index];
}
$sql_part = substr($sql_part, 0, -4);
$sql_part .= ') THEN \'' . $row[$column] . '\'';
$parts[$column][] = $sql_part;
}
}
/*
* connecting WHEN .. THEN parts for each column to be updated
*/
foreach ($columns as $column) {
$sql .= $column .'= CASE ';
foreach ($parts[$column] as $sql_part) {
$sql .= $sql_part;
}
$sql .= ' ELSE ' . $column . ' END,';
}
/*
* adding WHERE part
*/
$sql = substr($sql, 0, -1);
$sql .= ' WHERE ';
foreach ($indexes as $index) {
if ( count($where[$index]) > 0){
$unique_where = array_unique($where[$index]);
$sql .= $index . ' IN (\'' . join('\',\'', $unique_where) . '\') AND ';
}
}
$sql = substr($sql, 0, -4);
$sql .= ';';
return $db->query($sql);
}
答案 1 :(得分:0)
此 update_batch 函数不允许使用 WHERE 参数,但是您可以在调用该函数之前尝试对其进行拆分。
尝试一下:
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->where('name','My Name 2');
$this->db->update_batch('mytable', $data, 'title');
控制器:
$chunk1 = array_chunk($data,100);
for($i=0;$i < count($chunk1);$i++) {
$this->upload_model->update_data($chunk1[$i],'My Name 2');
}
型号:
public function update_data($data='',$name=''){
$this->db->where('name',$name);
$this->db->update_batch('mytable', $data, 'title');
}
请记住,我的WHERE参数是一个静态值。
答案 2 :(得分:0)
您可以使用以下代码更新数据:
$this->db->update("TableName",[dataarray],[where condition array]);
答案 3 :(得分:-3)
您可以随时执行此操作:
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->where(array('title' => 'title', 'name' => 'name'));
$this->db->update_batch('mytable', $data);
未经测试。
更新这缺少where
中所需的update_batch()
参数。