2014-11-02 3 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'문으로 예외를 억제하거나 'insert'대신 'replace'메소드를 사용할 수도 있습니다.

테이블에 대한 권한이 없으면 새 레코드를 삽입하기 전에 쌍이 SQL 호출과 별도로 존재하는지 확인해야합니다.