我有2個mysql表property
和building
。在property
表I有一個名爲unitnumber
字段在此字段中的值是像1a
,2b
等。在building
表我有一個字段稱爲address
這是在PHP's
urlencoded
格式。值將是類似於26+Dovedale+Place%2C+Parnell
處理mysql中的特殊字符
現在我想實現搜索功能,以便當用戶輸入1a, 26 Dovedale
我需要從數據庫中拉出結果。
工作迄今:
$keyword = preg_replace('/[^a-zA-Z0-9-]/', '', $_REQUEST['keyword']);
$keyword = str_replace(" ", "-", $keyword);
$a->rqNotEmpty('keyword', $keyword);
$query = "SELECT * FROM `buildings` b left join properties p on p.buildingId=b.id
WHERE concat(p.floor,p.number,b.address) LIKE '%".$keyword."%'
or concat(p.number,p.floor,b.address) LIKE '%".$keyword."'";
但是現在的問題是,當我準備$keyword
變量CONCAT
後,我會得到這樣的1a26Dovedale
和數據庫中的值將是somethign像1a26+Dovedale+Place%2C+Parnell
。我不能urlencode $關鍵字,因爲數據庫不是標準化的形式。數據庫我的地址之間有2個空格。那麼有沒有辦法給urldecode
mysql字符串?我在這裏處理近400萬條記錄!
爲什麼數據庫中的數據是urlencoded?一旦從數據庫IMO中提取數據,就應該完成(如有必要)。 – drew010 2012-07-27 00:48:13
@ drew010:是的,你是禮儀..這是由另一個開發人員完成的,並且該項目已經有很長的一段路要將其改變爲適當的方式..現在我們沒有時間重寫錯誤的邏輯了。可悲的是我必須忍受這個.. – Deepak 2012-07-27 00:50:45
如果用戶輸入「Dovedale 1a26」,你還想要找到「1a26 + Dovedale + Place%2C + Parnell」嗎?也許你應該把每個關鍵字放在單獨的WHERE條件中。 – Brilliand 2012-07-27 00:52:36