2014-02-07 83 views
0

我有一個包含所有美國城市的表格。結構和採樣串的樣子:帶部分匹配的mysql全文搜索

| id | zip | state | city | lat  | lng  | 
------------------------------------------------------------ 
| 29431 | 82732 | WY | Wright | 43.829349 | -105.532327 | 

我們的目標是建立一個AJAX autocomplete搜索,將檢查輸入對zipstatecity。這些都是一些搜索我已經做了和相應的結果:

- wright 
// returns all records containing wright as city 

- 82732 
// returns a single matching record 

- wrig 
// returns all records that partially match 

- wright wy 
// returns nothing 

所以最後的查詢返回什麼,但我需要它返回的唯一匹配記錄。

其中具有+*的條款由PHP產生在使用搜索查詢:

MATCH (zip, state, city) AGAINST ('+wright* +wy*' IN BOOLEAN MODE) 

那麼,如何可以修改此搜索,這樣搜索,例如wright wy只會返回精確匹配的記錄,NOT包括結果中的其他位置?

此外,如果術語的順序無關緊要,它也會很好,但根本不需要。即wy wright仍然返回有效結果。

+0

你能給出「你只返回確切的記錄」是什麼意思嗎? –

+0

如果我輸入'wright wy',我不應該得到其他狀態的結果。我只能收到與wright匹配的城市和wy匹配的記錄。 –

回答

0

如何進行兩步搜索。首先做一個RIGHT(entry,2)的分割,你首先只針對State列尋找匹配。如果匹配,則刪除2個字符,然後在剩餘的地方搜索城市。剝離後,您繼續使用現有的代碼。

如果找不到狀態,則直接進入現有代碼。

在實踐中,如果發現狀態剝離右','和結尾空格,我也會採取一步。

阿諾