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

damngood

Мозг был, но ушел...
Тогда на ум приходит только similar_text() и фуллскан всех данных...
 

dimagolov

Новичок
имхо есть довольно простые решения, которые с одной стороны не требуют полного перебора, а с другой позволяют искать опечатки.

моя идея в том, что если ФИО набрано с опечатками, то вероятность того, что они и в имени и в имени-отчестве будут опечатки не велика. то есть отбираем всех однофамильцев и ищем опечатки в ИО, а потом отбираем всех с идентичным ИО и ищем опечатки в фамилии.
еще можно исходить из того, что если фамилии бывают редкие, то имена редкими бывают много реже. то есть если нету совпадений у имени или отчеству, то они с высокой долей вероятности набраны с ошибками (при относительно большой базе имен, а если база небольшая то полный перебор не будет проблема) и стоит перебрать на возможные опечатки.
 

goacher

Новичок
Отбирать все у кого Правильно 3 первых буквы фамилии и полностью павльные имя и отчество, как это сделать, просто?
 

StiM

Новичок
Автор оригинала: goacher
Отбирать все у кого Правильно 3 первых буквы фамилии и полностью павльные имя и отчество, как это сделать, просто?
SELECT * FROM table where fio like 'Ива% Иван Иванович';
 

goacher

Новичок
точно, а учет регистра при выборке есть?
найдет оно иванов иван иванович?
нужно чтобы такие записи тоже находило
 

Viktor_Rez

Новичок
Не большое допущение. Если надо предлагать юзверю возможные варианты его неправильного написания ФИО (хотя Иванов и Ыванов просто не реально ошибиться при набре на клаве в сознательном состоянии), то можно сразу слать в мускуль запрос вида, если перед этим mysq_num_rows вернул 0,

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

то мускуль вернёт релевантные строки удовлетворяющие запросу
 

goacher

Новичок
mysql_query("select * from ludi where fio like '".$buk_f."% ".$buk_i."% ".$buk_o."%' ");


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

Будет ли запрос правильным? а то что то слишком много отбирает личнего у меня
 

dimagolov

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

goacher

Новичок
просто база уже запущена и работает.

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

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


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

damngood

Мозг был, но ушел...
Ну запусти да попробуй, у нас же нету твоего дампа с данными.

Да и разделить данные с одного поля на 3 - дело написания одного скрипта.
 

dimagolov

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

-~{}~ 26.11.09 09:58:

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