我需要的是每次上传csv文件时我都需要更新数据库表,我的意思是如果csv文件中的 mid 存在于数据库 mid 中我必须更新那一行。如果csv文件中的 mid 在数据库 mid 中不存在,我必须将该新行插入数据库表。
目前我成功上传了存储在数据库表中的csv文件和数据。
我的控制器如下:
public function importcsv()
{
$data['menu'] = $this->AdminModel->get_menu();
$data['error'] = ''; //initialize image upload error array to empty
$config['upload_path'] = './assets/uploads/';
$config['allowed_types'] = 'csv';
$config['max_size'] = '1000';
$this->load->library('upload', $config);
// If upload failed, display error
if (!$this->upload->do_upload())
{
$data['error'] = $this->upload->display_errors();
$this->load->view('csvindex', $data);
}
else
{
$file_data = $this->upload->data();
$file_path = './assets/uploads/'.$file_data['file_name'];
if ($this->csvimport->get_array($file_path))
{
$csv_array = $this->csvimport->get_array($file_path);
foreach ($csv_array as $row)
{
$mid=$row['mid'];
$insert_data = array(
'mid'=>$mid,
'category'=>$row['category'],
'name'=>$row['name'],
'price'=>$row['price'],
'description'=>$row['description'],
);
$this->AdminModel->insert_csv($insert_data);
}
$this->session->set_flashdata('success', 'Csv Data Imported Succesfully');
redirect(base_url().'Admin/menu');
}
else
$data['error'] = "Error occured";
$this->load->view('csvindex', $data);
}
}
我认为将 csv 文件数据提取到数组 $ insert_data 之后我想我需要将它与数据库中的 mid 进行比较表。这怎么可能?我是新来的。提前感谢。
我在我的控制器中修改了它的外观:
public function importcsv()
{
$data['menu'] = $this->AdminModel->get_menu();
$data['error'] = ''; //initialize image upload error array to empty
$config['upload_path'] = './assets/uploads/';
$config['allowed_types'] = 'csv';
$config['max_size'] = '1000';
$this->load->library('upload', $config);
// If upload failed, display error
if (!$this->upload->do_upload())
{
$data['error'] = $this->upload->display_errors();
$this->load->view('csvindex', $data);
}
else
{
$file_data = $this->upload->data();
$file_path = './assets/uploads/'.$file_data['file_name'];
if ($this->csvimport->get_array($file_path))
{
$csv_array = $this->csvimport->get_array($file_path);
foreach ($csv_array as $row)
{
$data1['mid']=$row['mid'];
$data1['category']=$row['category'];
$data1['name']=$row['name'];
$data1['price']=$row['price'];
$data1['description']=$row['description'];
if($this->db->where('mid', $data1['mid']))
{
$this->db->update('menu', $data1);
}
if($this->db->where("mid !=",$data1['mid']))
{
$this->db->insert('menu', $data1);
}
}
$this->session->set_flashdata('success', 'Csv Data Imported Succesfully');
redirect(base_url().'Admin/menu');
}
else
{
$data['error'] = "Error occured";
$this->load->view('csvindex', $data);
}
}
}
现在我可以通过
更新数据了if($this->db->where('mid', $data1['mid']))
{
$this->db->update('menu', $data1);
}
它的工作正常,但使用条件:
if($this->db->where("mid !=",$data1['mid']))
{
$this->db->insert('menu', $data1);
}
将整个csv文件数据重新输入到表格菜单中。我需要比较菜单表中的 mid 和csv文件中的 mid ,如果中 > 菜单表中没有> csv文件,我需要将相应的记录插入菜单表。
为什么我必须在代码中完成所有更改?
答案 0 :(得分:1)
有一个解决方案。感谢大家的支持和时间。
public function importcsv()
{
$data['menu'] = $this->AdminModel->get_menu();
$data['error'] = ''; //initialize image upload error array to empty
$config['upload_path'] = './assets/uploads/';
$config['allowed_types'] = 'csv';
$config['max_size'] = '1000';
$this->load->library('upload', $config);
// If upload failed, display error
if (!$this->upload->do_upload())
{
$data['error'] = $this->upload->display_errors();
$this->load->view('admin/csvindex', $data);
}
else
{
$file_data = $this->upload->data();
$file_path = './assets/uploads/'.$file_data['file_name'];
if ($this->csvimport->get_array($file_path))
{
$csv_array = $this->csvimport->get_array($file_path);
foreach ($csv_array as $row)
{
$data1['mid']=$row['mid'];
$data1['category']=$row['category'];
$data1['name']=$row['name'];
$data1['price']=$row['price'];
$data1['description']=$row['description'];
$this->db->where('mid', $data1['mid']);
$q= $this->db->get('menu');
if( $q->num_rows() > 0 )
{
$this->db->where('mid',$data1['mid']);
$this->db->update('menu',$data1);
}
else
{
$this->db->set('mid',$data1['mid']);
$this->db->insert('menu', $data1);
}
}
$this->session->set_flashdata('success', 'Csv Data Imported Succesfully');
redirect(base_url().'Admin/menu');
}
else
{
$data['error'] = "Error occured";
$this->load->view('csvindex', $data);
}
}
}
答案 1 :(得分:0)
<强>逻辑:强> 如果数据已存在于数据库中。然后,您必须将数据库字段与CSV字段进行比较。如果两者都匹配,则更新数据,否则插入数据。
由于