Как дублированым строкам в mysql сделать update?

224
18 мая 2017, 13:04

Есть таблица в 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, сейчас сделано так: каждая строчка в файле это каждая строчка в базе, все вставляет все работает. Но оно вставляет еще и дубли, нужно дубли как-то апдейтить.

Answer 1

Вообщем пришел к такому выводу: поставит index в БД на поле email и все.

READ ALSO
Вывод с счётчиком и фильтром Mysqli

Вывод с счётчиком и фильтром Mysqli

Помогите вывести правильно, если убрать COUNT(ip) AS total, то всё работает отлично, но без счётчика очень печально!

253
Обработка массива php mysql

Обработка массива php mysql

Нужно вывести сгруппировав по bid_number:

278
Замена значения по словарю при SELECT

Замена значения по словарю при SELECT

Пытался гуглить, но так и не смог ничего найти

237