用于搜索所有类似记录的firstName和lastName列的SQL查询

时间:2012-03-31 11:26:25

标签: mysql sql

我正在努力在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不能解决这个问题,有没有其他方法或我被迫切换我的数据库引擎?

5 个答案:

答案 0 :(得分:2)

我认为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

答案 1 :(得分:1)

您应该尝试一个可以帮助您的MySQL FULLTEXT search。如果你在firstName和lastName上添加一个FULLTEXT索引,你可以像这样查询它:

SELECT *,MATCH(fullNameIndex) AGAINST ('search term') AS relevance
FROM `table`
ORDER BY relevance DESC

它甚至应该首先给你最好的匹配。

答案 2 :(得分:1)

字符串函数SOUNDEX将字符串转换为声音代码(可用于生成口语单词)。

示例:

mysql> select soundex('text'), soundex('test');
+-----------------+-----------------+
| soundex('text') | soundex('test') |
+-----------------+-----------------+
| T230            | T230            |
+-----------------+-----------------+

您可以使用此函数的结果来比较字符串

答案 3 :(得分:1)

您必须使用MySQL全文搜索内置功能。 有关示例的说明,请参阅here。 试试这个查询。

如果您使用的是MyISAM Engine。

 SELECT *FROM Emps
    WHERE MATCH(firstName,lastName) AGAINST ('Aditya Kumar Sharma' IN BOOLEAN MODE) 

对于Innodb,您必须花一些时间使用其中一些专家解决方案。 Plz通过Link1 Link2会帮助你。

答案 4 :(得分:0)

http://en.wikipedia.org/wiki/Levenshtein_distance

一旦识别出类似的大型数据文件中的地址,我就会非常有效地使用它。我们还将其转换为匹配名称并获得了可观的结果。