Сопоставление данных с таблицей mysql

  • Автор темы Автор темы goacher
  • Дата начала Дата начала
Тогда на ум приходит только similar_text() и фуллскан всех данных...
 
имхо есть довольно простые решения, которые с одной стороны не требуют полного перебора, а с другой позволяют искать опечатки.

моя идея в том, что если ФИО набрано с опечатками, то вероятность того, что они и в имени и в имени-отчестве будут опечатки не велика. то есть отбираем всех однофамильцев и ищем опечатки в ИО, а потом отбираем всех с идентичным ИО и ищем опечатки в фамилии.
еще можно исходить из того, что если фамилии бывают редкие, то имена редкими бывают много реже. то есть если нету совпадений у имени или отчеству, то они с высокой долей вероятности набраны с ошибками (при относительно большой базе имен, а если база небольшая то полный перебор не будет проблема) и стоит перебрать на возможные опечатки.
 
Отбирать все у кого Правильно 3 первых буквы фамилии и полностью павльные имя и отчество, как это сделать, просто?
 
Автор оригинала: goacher
Отбирать все у кого Правильно 3 первых буквы фамилии и полностью павльные имя и отчество, как это сделать, просто?
SELECT * FROM table where fio like 'Ива% Иван Иванович';
 
точно, а учет регистра при выборке есть?
найдет оно иванов иван иванович?
нужно чтобы такие записи тоже находило
 
Не большое допущение. Если надо предлагать юзверю возможные варианты его неправильного написания ФИО (хотя Иванов и Ыванов просто не реально ошибиться при набре на клаве в сознательном состоянии), то можно сразу слать в мускуль запрос вида, если перед этим mysq_num_rows вернул 0,

SELECT id,MATCH (`Field_FIO`) AGAINST ('Text_FIO') FROM `table`.

то мускуль вернёт релевантные строки удовлетворяющие запросу
 
mysql_query("select * from ludi where fio like '".$buk_f."% ".$buk_i."% ".$buk_o."%' ");


$buk_f - три первых буквы фамилии
$buk_i - три первых буквы имени
$buk_o - - три первых буквы отчества

Будет ли запрос правильным? а то что то слишком много отбирает личнего у меня
 
goacher, Храни фамилию, имя и отчество в отдельных полях, а еще лучше сделай еще дополнительные поля для инициалов (первых букв). Тогда можно будет сделать составной индекс по инициалам и искать по нему очень быстро.
 
просто база уже запущена и работает.

а мой запрос правильный будет?

mysql_query("select * from ludi where fio like '".$buk_f."% ".$buk_i."% ".$buk_o."%' ");


$buk_f - три первых буквы фамилии
$buk_i - три первых буквы имени
$buk_o - - три первых буквы отчества
 
Ну запусти да попробуй, у нас же нету твоего дампа с данными.

Да и разделить данные с одного поля на 3 - дело написания одного скрипта.
 
блин, ну ты же и сам видишь, что НЕТ. с такой структурой тебе REGEXP() нужен
просто база уже запущена и работает
ну поздравляю. теперь ты или доработаешь ее структуру и исправишь код, конвертируешь данные ОДИН РАЗ, или будешь трахаться с существующей конченной базой и таки будешь вынужден будешь делать преобразование, когда сервер загнется от перегрузки, но на большем объеме данных и с большим геморроем.

-~{}~ 26.11.09 09:58:

кстати, классический пример, когда пренебрежении принципом атомарности данных в БД выходит боком
 
Сверху