2012-03-15 104 views
1

所以我有一个人名的表。 我需要编写一个查询来选择名称与给定名称最相似的人员。MySQL:选择最相似的值?

例如:

SELECT * FROM people WHERE name='joen' 

“joen”犯规存在于表,所以它会返回约翰,它存在于表。

这是什么MySQL命令?

回答

0

我不是这方面的专家,但是这是非同小可。 “相似”是否意味着它可能是一个或两个字母,或者你的意思是“乔恩”应该与“乔纳森”和“比尔”匹配“威廉”吗?

如果是后者,您可能需要查找或构建将名称/昵称映射到彼此的表,然后对其进行搜索。

如果是拼写错误,Levenshtein可能会提供帮助,但我不知道如何将它集成到SQL查询中。

2

Levenshtein算法计算词之间的 “距离”:Levenshtein MySQL function

您可以使用这样的,如果你添加功能:

SELECT * FROM people WHERE levenshtein('joen', `name`) BETWEEN 0 AND 4; 
-1

like关键字可能会帮助你

SELECT * FROM people WHERE name LIKE 'jo%' 

选择以“jo”开头的用户

如果您正在更改查询的程序,您可以通过减少指定的 “名称”中的字符来检查“结果”,并使用新查询重新查询数据库 。

SELECT * FROM people WHERE name LIKE 'jones%' 

SELECT * FROM people WHERE name LIKE 'jone%' 

SELECT * FROM people WHERE name LIKE 'jon%' 

SELECT * FROM people WHERE name LIKE 'jo%' 
+0

此查询无意义。因为您可以在'name'字段中搜索任何内容。 'substr'函数发送了很多查询到mysql,像你的。这是不可接受的。 – 2014-09-19 08:00:08