2012-07-28 113 views
1

這可能非常簡單。我正在構建一個搜索工具。我有一個保存地址的varchar字段。例如:PHP MySQL - 帶空格的搜索字段

2343 S Cherry Creek St. 

所以我想能夠搜索部分或全部的領域。我曾嘗試

LIKE '%$address%' 

但當

"2343 S Cherry" 

末利用類型,它返回任何結果。當用戶只輸入一個單詞時:

"2343" 

它返回正確的記錄。所以這讓我覺得這是關於不允許搜索整個術語的空間的東西。

有人可以告訴我如何建立這個,以便最終用戶可以用多個單詞搜索地址字段。我知道它與使用LIKE,%%有關,但我需要它來允許空格。

+0

我簡直無法相信'LIKE %%'不適合你! – verisimilitude 2012-07-28 16:01:17

回答

0

試試這個

$arr = explode(' ', $address); 
if (count($arr)) { 
    $query = "SELECT address FROM table WHERE address LIKE '%" . implode("%' OR address LIKE '%", $arr) . "%' "; 
} 
0

我建議以下

SELECT * FROM table WHERE REPLACE(address, ' ', '') LIKE REPLACE('%$address%', ' ', ''); 

這將取代與非空間的空間,所以你可以匹配更緊密,更容易。

1

我在導入時出錯。所以被導入到數據庫的地址是增加了額外的空間。因此,當人們在單詞之間搜索一個空格時,它返回0結果,因爲db中的數據有兩個空格。我已經修復了我的導入腳本,現在它正在工作。謝謝。

1

問題不在於空格,而在於如何通過PHP插入用戶輸入。

看看這個SQLFiddle Demo


也許問題是,你似乎允許用戶在輸入中輸入引號,以便他們可以在整個字符串上執行搜索。

你想要做的是消除在PHP的報價,然後插入您的輸入到SQL語句或作爲綁定參數:

$address = strtr($address, array('"' => '', "'" => '')); 

這將刪除單,並從你的字符串雙引號。