v2.5.2
Giriş yap

CSV dosyasındaki tekrar eden alanları içeri aktarmam

Anonim
184 defa görüntülendi

Elimde bir csv dosyası var buradaki verileri mysql'e aktarmak istiyorum. Şöyle problem ile karşı karşıyayım. Veride unique olması gereken alanlar var. Tekrar eden verilerin ikisinide içeriye aktarmam gerekiyor. Bu problemi nasıl çözerim?

import fonksiyonum şu şekilde


//Get the file
ini_set('auto_detect_line_endings',TRUE);
$fh = fopen($_FILES['csv']['tmp_name'], 'r');
if (!$fh) {
    die("Dosya açılamadı");
}


//Import row by row
$stored = [];
$flag = true;
while (($row = fgetcsv($fh, 0, ';')) !== FALSE) {
    //Skip the first row
    if ($flag) {
        $flag = false;
        continue;
    }
    try {
        $stmt = $pdo->prepare("INSERT INTO employees (`name`, `surname`, `email`, `employee_id`) VALUES (?, ?, ?, ?)");
        $stmt->execute([
            $row[0],
            $row[1],
            $row[2],
            $row[3]
        ]);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

Cevap yaz
Cevaplar (1)
f4kor4ll
398 gün önce

Merhaba,

Bu durumda yapmanız gereken işlem, öncelikle verileri içe aktarırken, ekleme işleminin başarısız olması durumunda, hata mesajını kontrol ederek, "Duplicate entry" şeklinde bir hata mesajı var mı yok mu diye kontrol etmek. Eğer böyle bir hata mesajı varsa, ilgili kaydın zaten veritabanında olduğunu ve bu kaydın tekrar eklenmeye çalışıldığını anlayabiliriz. Böyle bir durumda, eklemeyi yoksayabilir ve işleme devam edebiliriz.

Bu nedenle, verileri içe aktarırken şu değişiklikleri yapmanız gerekebilir:

  • INSERT INTO ifadesinin sonuna "ON DUPLICATE KEY UPDATE" ekleyin.
  • Sonrasında, ekleyeceğiniz sütunların altına, "sütun adı=sütun değeri" şeklinde bir ifade ekleyin.

Bir örnek vermek gerekirse, şu şekilde yapabilirsiniz:

INSERT INTO employees (`name`, `surname`, `email`, `employee_id`) 
VALUES (?, ?, ?, ?) 
ON DUPLICATE KEY UPDATE 
`name`=?, `surname`=?, `email`=?

Bu şekilde, ekleme işlemi başarısız olursa, "ON DUPLICATE KEY UPDATE" ifadesi devreye girer ve ilgili kaydın güncellenmesini sağlar. Bu sayede, verileri içe aktarırken tekrar eden verileri eklemiş olursunuz.

Umarım yardımcı olabilmişimdir.