所以我有一个人名的表。 我需要编写一个查询来选择名称与给定名称最相似的人员。MySQL:选择最相似的值?
例如:
SELECT * FROM people WHERE name='joen'
“joen”犯规存在于表,所以它会返回约翰,它存在于表。
这是什么MySQL命令?
所以我有一个人名的表。 我需要编写一个查询来选择名称与给定名称最相似的人员。MySQL:选择最相似的值?
例如:
SELECT * FROM people WHERE name='joen'
“joen”犯规存在于表,所以它会返回约翰,它存在于表。
这是什么MySQL命令?
你可能会寻找SOUNDEX
和SOUNDS_LIKE
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
我不是这方面的专家,但是这是非同小可。 “相似”是否意味着它可能是一个或两个字母,或者你的意思是“乔恩”应该与“乔纳森”和“比尔”匹配“威廉”吗?
如果是后者,您可能需要查找或构建将名称/昵称映射到彼此的表,然后对其进行搜索。
如果是拼写错误,Levenshtein可能会提供帮助,但我不知道如何将它集成到SQL查询中。
Levenshtein算法计算词之间的 “距离”:Levenshtein MySQL function
您可以使用这样的,如果你添加功能:
SELECT * FROM people WHERE levenshtein('joen', `name`) BETWEEN 0 AND 4;
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%'
此查询无意义。因为您可以在'name'字段中搜索任何内容。 'substr'函数发送了很多查询到mysql,像你的。这是不可接受的。 – 2014-09-19 08:00:08
听起来像我所需要的。谢谢。 – user1091856 2012-03-15 01:44:13