Похожие строки

Stadnitski Alex

Новичок
Похожие строки

Здраствуйте.
Сразу скажу что поиск не дал желаемых результатов.

Задача.
Есть таблица пользователей, в которой более 200 тыс записей.
При регистрации нового пользователя нужно определить существуют ли похожие фамилии в табле.
Например, если фамилия нового пользователя пишется "Козёл", то нужно получить список пользователей, у которых фамилии "Козел", "Гозел", "Косёл" и т.д.
В php есть прекрасная функция levenshtein. Если ли подобные средства в MySQL? Пробовал FULLTEXT , но не помогает, так как он работает со словами, а не с символами =(
-----------------------------------------
Структура таблицы:

CREATE TABLE `Applicants` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`family_id` bigint(20) default NULL,
`image_id` bigint(20) NOT NULL default '0',
`lastname` varchar(128) character set latin1 NOT NULL default '',
`firstname` varchar(128) character set latin1 NOT NULL default '',
`middlename` varchar(128) character set latin1 NOT NULL default '',
`bcountry` varchar(128) character set latin1 NOT NULL default '',
`bcity` varchar(128) character set latin1 NOT NULL default '',
`bdate` date NOT NULL default '0000-00-00',
`address` varchar(128) character set latin1 NOT NULL default '',
`city` varchar(128) character set latin1 NOT NULL default '',
`district` varchar(128) character set latin1 NOT NULL default '',
`phone` varchar(128) character set latin1 NOT NULL default '',
`phone2` varchar(128) character set latin1 NOT NULL default '',
`zip` varchar(128) character set latin1 NOT NULL default '',
`mailingcountry` varchar(128) character set latin1 NOT NULL default '',
`married` enum('M','U','W','S') character set latin1 default NULL,
`child_num` int(11) NOT NULL default '0',
`gender` enum('Male','Female') character set latin1 NOT NULL default 'Male',
`beligible` enum('Y','N') character set latin1 NOT NULL default 'Y',
`child` enum('0','1') character set latin1 NOT NULL default '0',
`applicant` enum('0','1') character set latin1 NOT NULL default '0',
`number` int(11) unsigned NOT NULL default '0',
`created` date NOT NULL default '0000-00-00',
`changed` timestamp NOT NULL default CURRENT_TIMESTAMP,
`status` enum('n','s','r','g') collate latin1_bin NOT NULL default 'n',
`translit` text collate latin1_bin,
PRIMARY KEY (`id`),
FULLTEXT KEY `lastname` (`lastname`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
Надеюсь на вашу помощь.
 

baev

‹°°¬•
Команда форума
По-моему, тут на форуме уже было:
в ещё одно поле все фамилии в транслите писать, а транслит сравнивать Soundex'ом.

P.S. Блин...
А что у Вас за поле в базе: 'translit'?
И почему для полей "имя/фамилия" кодировка латинская стоит?
 

Stadnitski Alex

Новичок
Автор оригинала: baev
По-моему, тут на форуме уже было:
в ещё одно поле все фамилии в транслите писать, а транслит сравнивать Soundex'ом.

P.S. Блин...
А что у Вас за поле в базе: 'translit'?
И почему для полей "имя/фамилия" кодировка латинская стоит?
Так и сделал. То есть при добавлении записи, в новое поле добавьляется транслит фамилии. А потом делаю так как написано здесь: http://php.paco.net/manual/ru/function.levenshtein.php#50699

-~{}~ 27.01.06 12:37:

P.S.
Поле `translit` это поле в котором хранится массив с транслитерованным текстом введенных дользователем данных. Массив в поле `translit`забивается только после определенного действия админа.
 
Сверху