我有如下示例的数据,当我尝试添加新数据时,示例我想在id
02
上添加名称philips
,但在我更新名称ana, jack
以删除并存储名称philips
之后,是否有其他方法可以使用添加一个名称来更新表而不删除旧数据?
id | name | class
--------------------------------------
01 | smith, john, billy | III
02 | ana, jack, | IV
控制器$id = $this->uri->segment(3);;
$this->my_model->update_name($id);
模型function update_name($id) {
$data = array(
'name' => $this->input->post('name'));
$this->db->where('id', $id);
$this->db->update('mytable', $data);
}
您可以使用MySQL CONCAT()
,在您的情况下,它将是这样的:
function update_name($id) {
$name = $this->input->post('name');
$this->db->set('name', "CONCAT(name,', ','".$name."')", FALSE);
$this->db->where('id', $id);
$this->db->update('mytable', $data);
}
p。S:最好不要在你的模型中访问你的post输入,相反,你应该在你的控制器中验证它,然后把它作为一个参数传递给你的模型。
我认为这里有两种选择,第一种是从字段中收集信息,并使用PHP将两个字符串连接在一起。
$current_names = $this->db->select( 'name' )->from( 'mytable' )-.where( 'id', $id )->get()->result();
$new_names = $current_names.', '.$this->input->post( 'name' );
function update_name($id) {
$data = array(
'name' => $new_names
);
$this->db->where('id', $id);
$this->db->update('mytable', $data);
}
第二个是使用更传统的sql语句与concat,我没有测试过这个,但接近这个应该工作。
$query = 'UPDATE `mytable` SET name = CONCAT(`name`, ' ;
$query .= ",'$this->input->post( 'name' )'";
$query .= ') WHERE `id` = ' . $id;
$this->db->query($query);
这种方法是从这里采取的,虽然它是CI2它仍然应该工作,Codeigniter 2.1 - MySQL CONCAT(追加字符串)