Перейти к содержимому


Как избежать дублирования записи


Сообщений в теме: 2

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 08 Июнь 2018 - 15:38

Добрый день. Имеется вычисление, генерирующие записи для таблицы1 из данных таблицы2.
И есть проблема, если у некоторых записей таблицы2 обновятся данные или же в ней появятся новые записи, то при выполнении вычисления в таблице 1 не произойдет обновление записей и добавление новых, а произойдет дубляж записей.
Как его можно избежать, в настройках таблицы стоит запрет на дубли, но он срабатывает только если пытаться отредактировать запись в ручную.
//Email контрагента
$agent_email = $line['E-mail'];
//Юр. имя
$ur_name = $line['Юридическое название'];
$from = 'Контрагенты';
$project = $line['Проект'];
//Создадим запись в таблице "Email marketing"
$data['E-mail'] = $agent_email;
$data['Контрагент'] = $line['ID'];
$data['Источник'] = $from;
$data['Проект'] = $project ;
if($agent_email != '')
{
    if($line['f8160'] == 'WEBCOM MOBI' || $line['f8160'] == 'DjangoSMS'){
	    insert_query($data, "E-mail marketing");
    }
}
//Смотрим подтаблицу сотрудники
$sqlQuery = "SELECT f549 as mail  FROM ".DATA_TABLE."51 WHERE f545 = '".$line['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$result = data_select(51, "f545=",$line['ID']);
while($row5 = sql_fetch_array($result)){
	    if($row5['f549'] != '' && $row5['f549'] != $agent_email){
		    $addSot['E-mail'] = $row5['f549'];
		    $addSot['Контрагент'] = $line['ID'];
		    $addSot['Источник'] = 'Сотрудники';
		    $addSot['Проект'] = $project ;
		    if($row5['f13821'] == 'WEBCOM MOBI' || $row5['f13821'] == 'DjangoSMS'){
			    insert_query($addSot, "E-mail marketing");
		    }
	    }
}

На ум приходит только перебор таблицы2 перед добавлением записей.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 681 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Июнь 2018 - 18:04

Перебор всех записей что ли? А что мешает сразу в запросе задать нужные параметры поиска? Это мягко говоря на порядок быстрее, не о говоря уж о правильности.

#3 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 395 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 10 Июнь 2018 - 12:32

Жаль, что в КБ не реализовано добавление индекса к выбранному полю. Тогда бы INSERT IGNORE - и никаких проблем.
КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных