我想在表格中插入一行,如下所示:
$this->db->update_batch($this->table_name, $update, 'image_id');
if ($this->db->affected_rows() === 0) {
$this->db->insert_batch($this->table_name, $update);
}
但如果它存在我不想做任何事情。但是上面的代码插入了另一行,因为没有行受影响
我想我可以做 INSERT IGNORE INTO ,但我更喜欢使用CodeIgniters upate_batch 和 insert_batch 。
$update
- 变量类似于
$update = array(
array('id' => 1, 'name' => 'Gustav'),
array('id' => 2, 'name' => 'Peter'),
array('id' => 3, 'name' => 'Lisa')
)
更新
根据答案,我得到的是我对自己想要的东西不够清楚。 (我并不认为我已经足够清楚我想要的了,所以这里是我更新的问题,希望更清楚)
//This will insert Gustav, Peter and Lisa
$update = array(
array('image_id' => 1, 'name' => 'Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
$this->db->insert_batch($update);
//If I do this it would insert Party Gustav, Peter and Lisa.
$update = array(
array('image_id' => 1, 'name' => 'Party Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
$this->db->insert_batch($update);
//Above will create 6 rows
但我想要发生的是
$update = array(
array('image_id' => 1, 'name' => 'Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
$this->db->insert_batch($update);
$update = array(
array('image_id' => 1, 'name' => 'Party Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
//Insert batch but when existing image_ids just change the name
//from Gustav to Party Gustav (in this case)
$this->db->insert_batch($update);
//Above will create 3 rows
我猜它会等同于on key duplicate
的{{1}}。
答案 0 :(得分:2)
我认为您正在寻找的是INSERT IGNORE INTO
。不幸的是,Codeigniter没有等效的Active Record功能。 discussion on the Codeigniter forums和此similar SO question建议使用以下方法:
foreach ($update as $update_item) {
$insert_query = $this->db->insert_string($this->table_name, $update_data['name']);
$insert_query = str_replace('INSERT INTO','INSERT IGNORE INTO',$insert_query);
$this->db->query($insert_query);
}
另请注意image_id
must be UNIQUE
。
答案 1 :(得分:2)
首先从表中选择所有image_id。
$data = $this->db->select(`image_id`)->get($this->table_name)->result_array();
将image_id列入数组。
$image_ids=array();
foreach($data as $key => $value):
$image_ids[$key]=$value[`image_id`];
endforeach;
$update = array(
array('image_id' => 1, 'name' => 'Party Gustav'),
array('image_id' => 2, 'name' => 'Peter'),
array('image_id' => 3, 'name' => 'Lisa')
)
检查image_ids是否存在:
$update_query= $this->db->where_in(`image_ids`,$image_ids)
->get($this->table_name)->result();
if($update_query->num_rows() > 0):
$this->db->update_batch($update,$this->table_name);//update if ids exist
else
$this->db->insert_batch($update,$this->table_name);//insert if does not exist
endif;
答案 2 :(得分:0)
我已经使用了codeigniter已经有一段时间了,但你能检查一下该行是否存在,然后更新或插入?