![](/img/trans.png)
[英]SQL - Select all person whose "firstName lastName" contain a name
[英]Sql query for searching through firstName and lastName columns for all similar records
我正在努力在MYSQL中构建一个查询,通过它我可以搜索表中的firstName和lastName列,这些列可以返回几乎匹配它的所有记录。
就像我想搜索一个名字一样, Aditya Kumar Sharma和我的桌子包含这样的东西:
ID firstName lastName
1 Jack Mathews
2 Aditya Singh
3 James Hopes
4 Aditya Kumar Sharma
5 Adityahappy Singh
现在我想要在firstName和lastName列中包含任何这些Aditya或Kumar或Sharma的所有记录,这意味着我需要在结果集中包含以下记录:
ID firstName lastName
2 Aditya Singh
4 Aditya Kumar Sharma
5 Adityahappy Singh
任何人都可以提供一些线索,如何完成它。 如果最匹配的记录出现在顶部会更令人愉悦,那就是:
ID firstName lastName
4 Aditya Kumar Sharma
来自结果集,因为它完全匹配查询字符串。
编辑:我正在为我的数据库使用InnoDB引擎,所以FullText不能解决这个问题,有没有其他方法或我被迫切换我的数据库引擎?
我认为FULLTEXT
搜索会起作用
SELECT *,
MATCH ( `FirstName`, `Lastname`)
AGAINST ('+name +middle_name +lastname' IN BOOLEAN MODE) as `rel`
FROM `table`
WHERE MATCH ( `FirstName`, `Lastname`)
AGAINST ('+name +middle_name +lastname' IN BOOLEAN MODE)
ORDER BY `rel` DESC
您应该尝试MySQL FULLTEXT搜索 ,它可以帮助您。 如果在firstName和lastName上添加FULLTEXT索引,则可以像这样查询它:
SELECT *,MATCH(fullNameIndex) AGAINST ('search term') AS relevance
FROM `table`
ORDER BY relevance DESC
它甚至应该首先给你最好的匹配。
字符串函数SOUNDEX
将字符串转换为声音代码(可用于生成口语单词)。
例子:
mysql> select soundex('text'), soundex('test');
+-----------------+-----------------+
| soundex('text') | soundex('test') |
+-----------------+-----------------+
| T230 | T230 |
+-----------------+-----------------+
您可以使用此函数的结果来比较字符串
http://en.wikipedia.org/wiki/Levenshtein_distance
一旦识别出类似的大型数据文件中的地址,我就用它来提高效率。 我们还将其转换为匹配名称并获得了非常好的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.