Можете да започнете с използването на SOUNDEX()
, това вероятно ще свърши работа за това, от което се нуждаете (представям си кутия за автоматично предложение на вече съществуващи алтернативи за това, което потребителят въвежда).
Недостатъците на SOUNDEX()
са:
- неспособността му да различава по-дълги низове. Само първите няколко знака се вземат предвид, по-дългите низове, които се разминават в края, генерират същата стойност на SOUNDEX
- фактът, че първата буква трябва да е една и съща или няма да намерите лесно съвпадение. SQL Server има функция DIFFERENCE(), за да ви каже колко са разделени две стойности на SOUNDEX, но мисля, че MySQL няма нищо подобно вградено.
- за MySQL, поне според документи , SOUNDEX е счупен за въвеждане на unicode
Пример:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
За по-напреднали нужди мисля, че трябва да погледнете разстоянието на Левенщайн (наричано още "разстояние за редактиране") от два низа и работа с праг. Това е по-сложното (=по-бавно) решение, но позволява по-голяма гъвкавост.
Основният недостатък е, че имате нужда от двата низа, за да изчислите разстоянието между тях. Със SOUNDEX можете да съхранявате предварително изчислен SOUNDEX във вашата таблица и да сравните/сортирате/групирате/филтрирате по него. С разстоянието на Левещайн може да откриете, че разликата между "Microsoft" и "Nzcrosoft" е само 2, но ще отнеме много повече време, за да стигнете до този резултат.
Във всеки случай, примерна функция за разстояние на Левещайн за MySQL може да бъде намерена на codejanitor.com:Разстоянието на Левещайн като съхранена функция в MySQL (10 февруари 2007 г.) .