2012-03-31 142 views
4

我正在努力在MYSQL中建立一個查詢,我可以通過它搜索表中的firstName和lastName列,可以返回幾乎匹配它的所有記錄。SQL查詢搜索所有類似記錄的名字和姓氏列

就像我要搜索一個名字說,阿迪亞·庫馬爾·夏爾馬和我的表containes是這樣的:

ID firstName  lastName 
1  Jack    Mathews 
2  Aditya   Singh 
3  James   Hopes 
4  Aditya Kumar  Sharma 
5  Adityahappy  Singh 

現在我想包含任何這些阿迪亞庫馬爾的所有記錄或Sharma在firstName和lastName列中,這意味着我需要以下記錄在我的結果集中:

ID firstName  lastName 
2  Aditya   Singh 
4  Aditya Kumar  Sharma 
5  Adityahappy  Singh 

任何人都可以提供一些線索,如何完成它。如果最匹配的記錄來在上面會更賞心悅目,那就是:

ID firstName  lastName 
4  Aditya Kumar  Sharma 

亮起結果集的頂部,因爲它是完全匹配的查詢字符串。

編輯:我爲我的數據庫使用InnoDB引擎,所以FullText不工作,有沒有其他方式或我被迫切換我的數據庫引擎?

+0

他想要在firstName和lastName列中包含Aditya或Kumar或Sharma中的任何一個的所有記錄,而這意味着我們需要在這裏考慮或規定not'And'。 – Java 2012-03-31 14:25:34

回答

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

你應該試試MySQL FULLTEXT search這應該對你有幫助。如果您在firstName和lastName添加FULLTEXT內你就可以查詢反對這樣的:

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

它甚至應該首先給你的最佳匹配。

1

字符串函數SOUNDEX將字符串轉換爲聲音代碼(可用於生成說出的單詞)。

例子:

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

您可以使用此函數的結果比較字符串

1

你必須使用MySQL全文搜索內置函數。 請參閱here用示例說明。 試試這個查詢。

如果您正在使用MyISAM引擎。

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

對Innodb來說,你必須花費一些時間來解決這些專家解決方案。 Plz通過Link1Link2將幫助你。

+0

但我有InnoDB引擎而不是MyISAM,據我所知Fulltext不能在InnoDB上工作,有沒有其他方法? – Abhi 2012-03-31 12:33:52

+0

plz通過我發佈在我更新的答案中的鏈接,將幫助你。 – Java 2012-03-31 12:44:45

+0

感謝您的鏈接,他們確實非常有幫助。 – Abhi 2012-03-31 12:55:07