2011-07-16 127 views
11

我從來沒有真正聽到這個直接回答,我只需要全文搜索一對夫婦與列多個單詞「姓」MySQL全文索引搜索多個單詞

$sql = mysql_query("SELECT * FROM 
        patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('% $term %' IN BOOLEAN MODE);"); 

但它無法運行查詢我是否在此輸入多個單詞。

回答

16
$sql = mysql_query("SELECT * FROM 
     patient_db WHERE 
     MATCH (Name, id_number) 
     AGAINST ('+first_word +second_word +third_word' IN BOOLEAN MODE);"); 

,如果你想要做精確搜索:

$sql = mysql_query("SELECT * 
        FROM patient_db 
        WHERE MATCH (Name, id_number) 
        AGAINST ('"exact phrase"' IN BOOLEAN MODE);"); 
+1

如果您可以搜索的術語數量有限,是否有人能夠啓發我匹配查詢?在這個答案的例子中,你有third_word,它也在我自己的查詢中工作,但是當我把+ fourth_word放在列中時,即使它存在於列中,它也會返回空結果。 – vincent

+1

「確切短語」並不意味着沒有任何符號的確切短語(+/-),它將被視爲OR。在全文檢索中沒有確切的短語,只有全部單詞,一些單詞,沒有一個單詞。 – Gamesh

+1

這是改變了5年的時間 – Vineet1982

4
SELECT * 
FROM patient_db 
WHERE MATCH (Name, id_number) 
     AGAINST ("Firstname Lastname" IN BOOLEAN MODE); 

雙引號是重要的。這從字面上尋找短語「名字姓氏」。 你不需要百分號。

如果您尋找「名字blahblahblah姓blahblah」,該AGAINST()子句看起來像這樣:

AGAINST ('+Firstname +Lastname' IN BOOLEAN MODE); 

有看MySQL docs on full text search以獲得更多信息。

另一件事:爲什麼你的比賽中有id_number列?

+0

嗨對不起,我張貼之前,我昨天晚上去睡覺了。這仍然不適用於我,我只有一個名爲$ term的搜索字段,並且第一個和最後一個名稱都在同一個mySQL列中 – iamwhitebox