2013-04-04 82 views
2

我真的被打我的頭掛在牆上與這一個,我可以使用一些幫助。我有一個少於900條記錄的MYSQL數據庫。我必須跨多列進行全文搜索,但似乎並不奏效。當我搜索「LName」字段時,它將顯示一些記錄,例如,如果我搜索「Smith」,它將返回7行,當數據庫包含8個記錄時。當我搜索單個姓氏「Albritton」時,它不會當我知道它存在的時候根本就沒有發現它。數據庫中的許多記錄都是如此。即使我知道它確實存在,但它並不存在。MYSQL/PHP的搜索沒有找到的所有記錄在數據庫

我是做FROM/SELECT/WHERE /或跨LNAME,FNAME,城市,國家等進行搜索,但它只能搜索LNAME,仍然只會返回部分結果。

後上網查詢的時間,我決定在表上創建一個索引和搜索索引WHERE匹配搜索,其工作,但我仍然得到同樣的效果有限。我使用PHPMYADMIN並運行分析和修復,但它表示它很好,沒有任何改變。

從我讀過,有一張桌子這個小,我最好不使用索引的一切,我很好這一點,但似乎沒有正常工作。

此外,在所有我創建索引的基數是「1」,這似乎並不正確。

我要在這裏貼上我的search.php。請原諒這一切,我一直在嘗試一些東西。任何幫助表示讚賞。

/* $result = mysql_query ("SELECT * FROM attorney WHERE lname LIKE '%$keyword%' 
OR 
fname LIKE '%$keyword%' 
OR 
phone LIKE '%$keyword%' 
OR 
bizname LIKE '%$keyword%' 
OR 
address LIKE '%$keyword%' 
OR 
city LIKE '%$keyword%' 
OR 
zip LIKE '%$keyword%' 

ORDER BY if(lname = '' or lname is null,1,0), lname ASC, fname $limit"); */ 
$result = mysql_query ("SELECT * FROM attorney USE INDEX (index1) WHERE MATCH (lname, fname, city, state, zip) AGAINST ('%$keyword%' IN BOOLEAN MODE) 

"); 


$row = mysql_fetch_array($result); 
if (!$result) 
    { 
    die("Error: Data not found.."); 
    } 

等等

回答

2

你並不需要在全文檢索使用%

試試這個:

SELECT * 
FROM attorney 
WHERE MATCH (lname, fname, city, state, zip) AGAINST ('+Smith' IN BOOLEAN MODE) 

還要注意的是字少於4個字符長的沒有索引,而不是默認設置MySQL搜索。

如果你需要搜索短詞,加

ft_min_word_len = 1 

到您my.cnf然後重建全文索引。