每次csv文件上传到codeigniter时如何更新数据库表?

时间:2016-08-05 04:38:41

标签: php codeigniter csv

我的csv文件如下: sv file

我的数据库表格如下: enter image description here

我需要的是每次上传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文件,我需要将相应的记录插入菜单表。

为什么我必须在代码中完成所有更改?

2 个答案:

答案 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字段进行比较。如果两者都匹配,则更新数据,否则插入数据。

由于