Как найти однофамильцев на php?

У меня есть фамилия пользователя и некая база фамилий.
Необходимо найти однофамильцев.
То есть чтобы для 'Иванов' находилась также фамилия 'Иванова', но не находилась 'Ипанов'.
Как это лучше всего сделать?
  • Вопрос задан
  • 1078 просмотров
Пригласить эксперта
Ответы на вопрос 3
@imhuman
В целом не такая тривиальная задача, чтоб решать одной строкой. По сути нужно каждую фамилию привести к мужскому варианту. Изучить правила образований и склонений фамилий, там не так и много получится. Например, -ова(-ева) в конце заменить на -ов(-ев). -ко, -чук оставить без изменений и так далее. Фамилии, являющиеся одновременно словарными именами существительными, тоже оставить без изменений. Ну и составлять словарь исключений, без него тоже не обойтись, скорее всего. А потом уже делать строгое сравнение мужских вариантов фамилий.
Ответ написан
$lastname = фамилия
"SELECT * FROM %откуда выбираем% WHERE lastname = $lastname"

Только вместо звездочки поставьте поля, данные из которых вам нужны
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Тут вопрос скорее к лингвистам чем к программистам, определитесь с алгоритмом формирования "однофамилий" для ЛЮБОЙ фамили, после этого запрос составить будет уже проще чем 2 байта переслать. Реально - достаточно по фамили определить окончания, отделить их и получить корень фамилиии и максимальную длину возможных строк фамилии:
$DB->exec("SELECT *
FROM `table` 
WHERE `lastname` LIKE '?%'  
and CHAR_LENGTH(`lastname`) < ?", array($lastNameRoot,$lastNameMaxLenght));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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