2014-11-02 86 views
0

這是根據日期將新行插入表中的函數。如果行已經存在,我想避免重複行。該函數基本上將2014年11月插入爲mwf_month,因此mwf_student_id和mwf_month對對於該行是唯一的。我應該做些什麼修改來避免這種重複?根據日期將行插入表中

public function month_wise_due($grade_due, $new_due, $id, $remaining) { 

     $now1 = time(); 
     $now = date('F, Y', $now1); 

     $store = array(
      'mwf_month' => $now, 
      'mwf_previous' => $remaining, 
      'mwf_due' => $grade_due, 
      'total_due' => $new_due, 
      'mwf_student_id' => $id, 
      'mwf_pay_day' => 'Not Yet Paid', 
      'mwf_payment' => 0, 
      'mwf_diff' => $new_due 
     ); 

     $this->db->trans_start(); 
     $this->db->insert('mwf', $store); 
     $this->db->trans_complete(); 
    } 

回答

0

我已經找到了解決方案,從其他地方沒有改變表格,這對我來說似乎很好。

$now1 = time(); 
     $now = date('F, Y', $now1); 

     $row_exists = "SELECT * FROM mwf WHERE mwf_month = '" . $now."' AND mwf_student_id = '" . $id."' LIMIT 1"; 

     if (! $this->db->simple_query($row_exists)) { 
     $store = array(
      'mwf_month' => $now, 
      'mwf_previous' => $remaining, 
      'mwf_due' => $grade_due, 
      'total_due' => $new_due, 
      'mwf_student_id' => $id, 
      'mwf_pay_day' => 'Not Yet Paid', 
      'mwf_payment' => 0, 
      'mwf_diff' => $new_due 
     ); 

     $this->db->trans_start(); 
     $this->db->insert('mwf', $store); 
     $this->db->trans_complete(); 
     } 
4

正確的方法是將「唯一的密鑰」兩分田「mwf_month + mwf_student_id」更新您的數據庫表。要執行此操作的SQL命令是:

ALTER TABLE `mwf` ADD UNIQUE `unique_month_student`(mwf_month,mwf_student_id); 

然後,可能的重複性將以您可以捕獲的SQL錯誤結束。您也可以使用'ignore'語句來抑制異常,或使用'replace'方法而不是'insert'。

如果您在表上沒有所需的特權,您需要在插入新記錄之前簡單地檢查該對是否存在單獨的sql調用。