2012-09-18 3 views
0

을 사용하여 CSV에서 MySQL로 가져 오기이 cpv 파일의 모든 행과 열을 mysql 테이블에 레코드로 가져 오기위한 PHP 코드가 있습니다. 그것은 successsuly "import_items"이라는 테이블에 CSV에서 삽입 하지만 내가 다시 가져 오기를 수행 경우 중복 기록을 삽입합니다. 모두 내가 필요한 쿼리 업데이트에 맞는 것입니다 항목이 테이블 이름이 인 경우 -> 업데이트 값, IF NOT EXISTS .. 레코드를 삽입하십시오! 업데이트

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

File to import:<br /> 

<input size='30' type='file' name='filename'> 

<input type="submit" name="submit" value="Upload"></form> 



<?php 
require_once('connect_db.php'); 

    //Upload File 
    if (isset($_POST['submit'])) { 
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 


    //Import uploaded file to Database 
    $row = 1; 
    $handle = fopen($_FILES['filename']['tmp_name'], "r"); 


    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

       //Update Database Values 

     $import="insert into import_items (item_no,qty,actual_price,discount_price,difference_price,date) VALUES('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."', '".mysql_real_escape_string($data[2])."', '".mysql_real_escape_string($data[3])."', '".mysql_real_escape_string($data[4])."', '".$date = date('Y-m-d')."')"; 

     mysql_query($import) or die(mysql_error()); 

    } 



    fclose($handle); 
    } 
} 
    ?> 

당신

답변

2

INSERT INTO ... ON DUPLICATE KEY UPDATE ... 구문을 확인하십시오. 아, 테이블에 기본 키가 있는지 확인하십시오. 항상 좋은 생각입니다.

+0

정말 고마워요, 그것은 매력처럼 작동합니다 :)! – Alihamra

0

MySQL이 기존 행에 대해 확인하고 존재하지 않는 경우에만 삽입하는 문이 감사합니다

여기 내 코드입니다.

REPLACE INTO import_items... 

INSERT INTO 대신에 사용하십시오. 구문은 다른 경우 동일합니다.

이 문은 테이블의 기본 키가 중복되는지 확인합니다. 키가 존재하지 않으면 행이 삽입됩니다. 키가 있으면 행의 다른 필드를 갱신합니다. SELECT를 먼저 수행 한 다음 UPDATE 또는 INSERT를 수행하기 위해 분기하는 것과 동일합니다.

+0

REPLACE는 기본 키가 존재하지 않을 때만 삽입하는 것이 아니라 기본 키를 통해 덮어 쓰는 것이 일반적입니다. ... – Orbling

+0

@Matt S, REPLACE INTO를 시도했지만 여전히 Duplicates가 있습니다 :( – Alihamra

+0

@Alihamra, 어느 것이든지 당신이가는 해결책, 중복을 피하기 위해 테이블에 기본 키가 있는지 확인하십시오. –

0

테이블 스키마를 공유해야합니다. REPLACE INTO 또는 INSERT ... ON DUPLICATE KEY UPDATE을 사용하면 중복을 적용하지 않을 열 전체에 적절한 키가없는 경우 작동하지 않습니다. (테이블을 중복 제거한) 쉬운 일은 복제를 방지하려는 열에 고유 한 키를 배치하는 것입니다.

관련 문제