mysql - 用错别字的sql查询

时间:2016-06-06 08:34:54

标签: mysql sql

我有这张公司表:

TABLE company
+----+----------------+--------+--------+
| id | name           | rating | enable |
+----+----------------+--------+--------+
| 1  | Spirit company | 3.5    | 1      |
| 2  | Test           | 2      | 1      |
| 3  | Hello world    | 4      | 1      |
+----+----------------+--------+--------+

当用户进行研究时,会进行此查询(例如search = spirit company):

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,因为只有一个字母不同。

1 个答案:

答案 0 :(得分:1)

很棒的@ neurotic-d

所以新查询:

SELECT `company`.*,
    1+IF(`name` REGEXP 'sp[iíìîï]r[iíìîï]t[ -][cç][oóòôöõø]mp[aáàâäåã][nñ][yýÿ]',10,
      IF(levenshtein(`company`.`name`, 'spirit company')<3,8,
      IF(`company`.`name` REGEXP '(sp[iíìîï]r[iíìîï]t)|([cç][oóòôöõø]mp[aáàâäåã][nñ][yýÿ])',5,
      IF(levenshtein(`company`.`name`, 'spirit')<LENGTH(`company`.`name`)-LENGTH('spirit')+1,3,
      IF(levenshtein(`company`.`name`, 'company')<LENGTH(`company`.`name`)-LENGTH('company')+1,3,
      0))))) as `ratio`
FROM `company`
WHERE `company`.`enable`=1
ORDER BY`ratio` DESC, `company`.`rating` DESC

非常感谢!