2012-07-27 179 views
1

我有2個mysql表propertybuilding。在property表I有一個名爲unitnumber字段在此字段中的值是像1a2b等。在building表我有一個字段稱爲address這是在PHP'surlencoded格式。值將是類似於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萬條記錄!

+3

爲什麼數據庫中的數據是urlencoded?一旦從數據庫IMO中提取數據,就應該完成(如有必要)。 – drew010 2012-07-27 00:48:13

+0

@ drew010:是的,你是禮儀..這是由另一個開發人員完成的,並且該項目已經有很長的一段路要將其改變爲適當的方式..現在我們沒有時間重寫錯誤的邏輯了。可悲的是我必須忍受這個.. – Deepak 2012-07-27 00:50:45

+0

如果用戶輸入「Dovedale 1a26」,你還想要找到「1a26 + Dovedale + Place%2C + Parnell」嗎?也許你應該把每個關鍵字放在單獨的WHERE條件中。 – Brilliand 2012-07-27 00:52:36

回答