2016-08-05 11 views
0

meine CSV-Datei wie folgt aussieht: sv fileWie aktualisiert man die Datenbanktabelle jedes Mal, wenn die CSV-Datei in den Code-Signierer hochgeladen wird?

meine Datenbank-Tabelle wie folgt aussieht: enter image description here

mein Bedürfnis ist, dass jedes Mal, wenn ich die CSV-Datei bin Hochladen i die Datenbanktabelle zu aktualisieren, Ich meine, wenn die Mitte in CSV-Datei in der Datenbank Mitte ist, muss ich diese Zeile aktualisieren. Und wenn Mitte in CSV-Datei ist nicht in der Datenbank Mitte Ich muss diese neue Zeile in die Datenbanktabelle einfügen.

Derzeit lade ich die CSV-Datei und Daten in der Datenbanktabelle erfolgreich hochgeladen.

mein Controller wie folgt aussieht:

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); 
     } 

    } 

Ich denke, nach den csv Dateidaten in das Array holt $ insert_data Ich glaube, ich brauche es zum Vergleich mit der Mitte in der Datenbank Tabelle. Wie ist es möglich? Ich bin neu in diesem Bereich. Danke im voraus.

Ich habe Änderungen in meinem Controller, sein Aussehen:

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); 
     } 

    } 
} 

Jetzt kann ich Daten aktualisieren Von

if($this->db->where('mid', $data1['mid'])) 
{ 
    $this->db->update('menu', $data1); 
} 

seine Werke in Ordnung, aber mit Bedingung:

if($this->db->where("mid !=",$data1['mid'])) 
{ 
    $this->db->insert('menu', $data1); 
} 

Die gesamten CSV-Dateidaten werden erneut in das Tabellenmenü eingegeben. Ich brauche Mitte im Menü Tisch und Mitte in der CSV-Datei zu vergleichen, wenn Mitte in der CSV-Datei nicht in Menü Tabelle I einfügen müssen, dass entsprechende Datensatz in die Menü Tabelle.

für das, was alle Änderungen sollte ich in den Code getan haben?

+0

ist 'Mitte' einzigartig dann? – ArtisticPhoenix

+0

ja Mitte ist einzigartig –

+0

vor dem Einfügen eines Datensatzes können Sie überprüfen, ob die gleiche Mitte existiert oder nicht. Wenn existiere Update sonst einfügen. Sie können dies mit einer einzigen SQL-Abfrage – Anish

Antwort

1

Haben Sie eine Lösung. Vielen Dank für Ihre Unterstützung und Zeit.

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); 
     } 

    } 
} 
0

Logik: Wenn Daten bereits in der Datenbank vorhanden sind. Dann müssen Sie das Datenbankfeld mit dem CSV-Feld vergleichen. Wenn beide übereinstimmen, Daten aktualisieren, fügen Sie andernfalls Daten ein.

Danke

+0

ja ich habe die Logik .. Ich arbeite daran. –