@pavlikmd

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

Есть таблица в 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, сейчас сделано так: каждая строчка в файле это каждая строчка в базе, все вставляет все работает. Но оно вставляет еще и дубли, нужно дубли как-то апдейтить.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@pavlikmd Автор вопроса
Сделал, просто поставил индекс полю email
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега PHP
Web developer
Вставлять всё. А потом с помощью
SELECT ... FROM ... GROUP BY email HAVING COUNT(*) > 1
найти дубли и что-нибудь с ними сделать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы