2
Я имею эту компанию таблицу:MySQL - SQL запросов с опечатками
TABLE company
+----+----------------+--------+--------+
| id | name | rating | enable |
+----+----------------+--------+--------+
| 1 | Spirit company | 3.5 | 1 |
| 2 | Test | 2 | 1 |
| 3 | Hello world | 4 | 1 |
+----+----------------+--------+--------+
Когда пользователь сделать исследование, этот запрос сделан (Exemple с поиском = дух компании):
SELECT `company`.*,
1+IF(`name` REGEXP 'sp[iíìîï]r[iíìîï]t[ -][cç][oóòôöõø]mp[aáàâäåã][nñ][yýÿ]',10,
IF(`company`.`name` REGEXP '(sp[iíìîï]r[iíìîï]t)|([cç][oóòôöõø]mp[aáàâäåã][nñ][yýÿ])',5,0)
) as `ratio`
FROM `company`
WHERE `company`.`enable`=1
ORDER BY`ratio` DESC, `company`.`rating` DESC
Это работает отлично! Теперь, если пользователь делает опечатку, можно дать средний результат?
Пример: поиск пользователей 'spitit company', я хочу добавить +3 к коэффициенту, потому что только одна буква отличается.
Таким образом, вам в основном нужна метрика, которая дает вам расстояние между двумя входами. Это то, что делает алгоритм расстояния Levensthein - этот пост дает вам функцию mysql для него: http://stackoverflow.com/questions/13909885/how-to-add-levenshtein-function-in-mysql –