CSV dosyasındaki tekrar eden alanları içeri aktarmam
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();
}
}
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.