Есть таблица в mysql с полями id, email, user, date, token, duplicate (где duplicate = 0), как сделать так чтобы при insert проверяло есть ли дубли и если они есть то вставлять но с параметром duplicate = 1.
Например:
в таблице есть строчки, у всех duplicate = 0 так как email везде разный, нужно сделать так, когда идет в базу insert и если email из insert совпадает уже c любым email из БД то вставлять этот email только с duplicate = 1.
Сейчас идет так, принимаем через ajax файл txt, потом перемещаем его в папку tmp, потом его разбиваем по строкам на строки в таблицу циклом while, и вставляем по строчке.
Вот кусок кода, где все это реализовано.
if ( $_FILES['file_base']["size"] < 52428800 ) {
if ( $_FILES['file_base']["error"] > 0 ) {
echo "Ошибка: " . $_FILES['file_base']["error"] . "<br/><br/>";
} else {
if ( file_exists( "" . $_FILES['file_base']["name"] ) ) {
echo $_FILES['file_base']["name"] . "<b>- уже есть аткой файл</b>";
} else {
$sourcePath = $_FILES['file_base']['tmp_name'];
$targetPath = "../tmp/" . $token . '.txt';
move_uploaded_file( $sourcePath, $targetPath );
$lines = file($targetPath);
$lines = array_unique($lines);
file_put_contents($targetPath, implode($lines));
$fp = fopen($targetPath, 'rt');
ini_set("memory_limit", "64M");
if ($fp) {
while (!feof($fp)) {
$email = fgets($fp, 999);
$query = $db->query("INSERT INTO `base_all` (email,user,date,token) VALUES('$email','$client_name','$date','$token')");
}
}
else {
echo "Ошибка при открытии файла";
}
fclose($fp);
unlink($targetPath);
}
}
}
p.s. Хочу отметить что insert происходит в БД не один раз, а много с txt файла, то есть в txt файле может быть до нескольких тысяч строк с email, сейчас сделано так: каждая строчка в файле это каждая строчка в базе, все вставляет все работает. Но оно вставляет еще и дубли, нужно дубли как-то апдейтить.