2014-11-02 68 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调用。