Mysql 用于在firstName和lastName列中搜索所有类似记录的Sql查询

Mysql 用于在firstName和lastName列中搜索所有类似记录的Sql查询,mysql,sql,Mysql,Sql,我正致力于在MYSQL中构建一个查询,通过该查询,我可以搜索表中的firstName和lastName列,这些列可以返回几乎匹配它的所有记录 就像我想搜索一个名字,比如说,Aditya Kumar Sharma,我的表包含如下内容: ID firstName lastName 1 Jack Mathews 2 Aditya Singh 3 James Hopes 4 Aditya

我正致力于在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
SELECT *,MATCH(fullNameIndex) AGAINST ('search term') AS relevance
FROM `table`
ORDER BY relevance DESC
现在,我希望在firstName和lastName列中包含以下任何一个AdityaKumarSharma的所有记录,这意味着我的结果集中需要以下记录:

ID    firstName        lastName
2     Aditya           Singh
4     Aditya Kumar     Sharma
5     Adityahappy      Singh
谁能给我一些线索,如何完成它。如果最匹配的记录出现在顶部,那将更令人高兴,即:

ID    firstName        lastName
4     Aditya Kumar     Sharma
位于resultset之上,因为它与查询字符串完全匹配

编辑:我在数据库中使用InnoDB引擎,所以全文不必再重复了,有没有其他方法,或者我被迫切换我的DB引擎?

你应该试试MySQL,它会对你有所帮助。如果在firstName和lastName上添加全文索引,则可以按如下方式对其进行查询:

ID    firstName        lastName
1     Jack             Mathews
2     Aditya           Singh
3     James            Hopes
4     Aditya Kumar     Sharma
5     Adityahappy      Singh
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            |
+-----------------+-----------------+

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

我认为
全文
搜索将起作用

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全文搜索功能。 有关示例的解释,请参见。 尝试此查询

如果您使用的是MyISAM引擎

 SELECT *FROM Emps
    WHERE MATCH(firstName,lastName) AGAINST ('Aditya Kumar Sharma' IN BOOLEAN MODE) 
对于Innodb,您必须花一些时间研究这些专家解决方案。
Plz浏览将对您有所帮助。

但我使用的是InnoDB引擎而不是MyISAM,据我所知,全文在InnoDB上不起作用,还有其他方法吗?Plz浏览我在更新答案中发布的链接将对您有所帮助。感谢链接,他们确实非常有帮助。他希望所有的记录包含这些阿迪亚或库马尔或夏尔马在FrimtNew和ListNeNeTrimes列中,你是意味着我们需要考虑或条件这里不'和'。