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


Выделить повторяющиеся строки

совпадения по полю

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

#1 Сан Саныч

    Участник

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

Отправлено 26 Апрель 2016 - 21:00

Добрый день, есть поля: Фамилия, Имя, Отчество, дата рождения, не редко бывает что клиент повторяется через определенное время, но по другой причине, т.е. в одной таблице есть записи в которых ФИО, дата рождения повторяются.
Вопрос в следующем, можно ли сделать так, что если в одной таблице есть записи по клиенту, с полным совпадением одновременно по полям ФИО, дата рождения, они каким то образом выделялись, что бы понимать что у него несколько записей. Спасибо.

#2 Александр Пономарев

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

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

Отправлено 26 Апрель 2016 - 21:26

В в вашей таблице ИмяТаблицы с полями Фамилия Имя Отчество Заводите поле "Дубль" числовое с одним символом и значением 0 по умолчанию.

$k="";  $new['Дубль']=1;
$objects=data_table("ИмяТаблицы", "`status`=0  ORDER BY `Фамилия`, `Имя`, `Отчество`" , "all");
foreach ($objects as $fio) {
  $n=trim($fio['Фамилия']).trim($fio['Имя']).trim($fio['Отчество']);
  if ($n===$k) {
	update_query($new,"ИмяТаблицы","`id`=".$fio['ID']);
	$k=$n;
  }
}

Код писал с головы, но должно работать. Если не сработает, перенесу к себе и проверю.

А в настройке таблице ставите окраску строки при условии поле "Дубль" равно единице.
Получите таблицу с раскраской всех повторяющихся полей отдельным цветом.
А вот "слияние" объектов, когда все ссылки на повторяющиеся записи автоматически заменяются ссылкой на первый объект с удалением повторяющихся - уже отдельная задача на коммерческой основе :-)

Сообщение отредактировал Александр Пономарев: 26 Апрель 2016 - 21:26


#3 Сан Саныч

    Участник

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

Отправлено 26 Апрель 2016 - 22:23

Ошибок не дает, но не работает...(
$k="";
$new['Дубль']=1;
$objects=data_table("Все портфели", "`status`=0 ORDER BY `Фамилия`, `Имя`, `Отчество`" , "all");
foreach ($objects as $fio) {$n=trim($fio['Фамилия']).trim($fio['Имя']).trim($fio['Отчество']);
if ($n===$k) {update_query($new,"Все портфели","`id`=".$fio['ID']);
$k=$n;
}
}

Везде 0, в т.ч. в одинаковых

Сообщение отредактировал Сан Саныч: 26 Апрель 2016 - 23:50


#4 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 27 Апрель 2016 - 10:48

Просмотр сообщенияАлександр Пономарев (26 Апрель 2016 - 21:26) писал:

В в вашей таблице ИмяТаблицы с полями Фамилия Имя Отчество Заводите поле "Дубль" числовое с одним символом и значением 0 по умолчанию.

$k="";  $new['Дубль']=1;
$objects=data_table("ИмяТаблицы", "`status`=0  ORDER BY `Фамилия`, `Имя`, `Отчество`" , "all");
foreach ($objects as $fio) {
  $n=trim($fio['Фамилия']).trim($fio['Имя']).trim($fio['Отчество']);
  if ($n===$k) {
	update_query($new,"ИмяТаблицы","`id`=".$fio['ID']);
	$k=$n;
  }
}
Код писал с головы, но должно работать. Если не сработает, перенесу к себе и проверю.
Крайне советую помещать такие вычисления в крон. Представьте что в таблице хотя бы тыс 50 записей. Вы делаете нагрузку на ровном месте.

#5 Сан Саныч

    Участник

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

Отправлено 27 Апрель 2016 - 11:05

Просмотр сообщенияwondertalik (27 Апрель 2016 - 10:48) писал:

Крайне советую помещать такие вычисления в крон. Представьте что в таблице хотя бы тыс 50 записей. Вы делаете нагрузку на ровном месте.
у меня такая нагрузка конечно не предвидится, но спасибо за совет, только не совсем понятно как это в кроне будет работать, там же нужно время срабатывания указывать...

#6 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 27 Апрель 2016 - 11:07

Просмотр сообщенияСан Саныч (27 Апрель 2016 - 11:05) писал:

у меня такая нагрузка конечно не предвидится, но спасибо за совет, только не совсем понятно как это в кроне будет работать, там же нужно время срабатывания указывать...
Уважаемый, Александр, Вам с вычислением поможет(помог). Периодичность раз в час вполне приемлемо в большинстве случаев

#7 Сан Саныч

    Участник

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

Отправлено 27 Апрель 2016 - 11:21

А если создать поле которое будет содержать в себе все 3 поля (фамилия имя отчество), вычисление по одному полю не упростится?

#8 Сан Саныч

    Участник

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

Отправлено 28 Апрель 2016 - 00:58

по какому-то не понятному принципу 1 в поле Дубли появились, но точно не у двойников...
кажется понял, у меня есть поле фамилия+имя+отчество, видимо вычисление по ним 1 присваивает, а если его убрать, не работает. :(

Сообщение отредактировал Сан Саныч: 28 Апрель 2016 - 11:49






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

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