2016-12-31 72 views
0

有沒有辦法讓我有一個名爲「位置」的輸入字段,並允許用戶輸入郵編或城鎮名稱來檢索商家信息?例如。布裏斯托爾或BS6 6NX允許用戶在一個字段中搜索兩個搜索字詞

下面是我的表結構目前

業務:(帶有示例數據)
ID - 1
- 蘋果
位置 - 布裏斯托爾
郵政編碼 - bs5 6nx

位置:(與實施例的數據)
ID - 1
名稱 - 布裏斯托爾
郵政編碼 - BS5 6

我的當前查詢是:

$query = " 
      SELECT b.id, b.name, b.category, b.thumb_picture, b.location 
      FROM business b 
      LEFT JOIN locations l ON b.location = l.name 
      WHERE l.name = ".$dbh->quote($userLocation)." 
      OR l.postcode LIKE ".$dbh->quote($userLocation."%")." 
      GROUP BY b.name 
      ORDER BY b.date DESC"; 

目前只能與城鎮名稱一起使用。

更新:

How to detect an address or a postal code in a variable

似乎是一個解決方案,確定如果字段是前手一個郵政編碼或城鎮,然後可能有2個查詢,根據結果?一個搜索郵政編碼欄和一個搜索城鎮?

+0

你爲什麼使用子查詢? –

+0

以上示例數據的預期輸出是什麼? – Susang

+0

列出給定搜索詞的用戶的企業名稱。因此,如果我輸入「Bristol」或「BS6 4NQ」。所有具有列的企業都會出現。 – DavidPottrell

回答

0
$query = "SELECT b.id, b.name, l.name, l.postcode 
FROM business b 
LEFT JOIN locations l ON l.name = b.location 
WHERE l.postcode LIKE '%" . $search_key . "%' 
OR l.name LIKE '%" . $search_key . "%' 
ORDER BY b.date DESC"; 
+0

只有代碼的答案總比沒有好,但是如果你可以添加幾行來解釋代碼在做什麼,那麼它會好得多...... –

+0

好的。我會記得下次:) –

0

我發現一個解決方案,我多挖了一點是下面。我首先確定是否輸入了郵編或城鎮。然後執行相應的查詢。

function IsPostcode($postcode) 
{ 
    $postcode = strtoupper(str_replace(' ','',$postcode)); 
    if(preg_match("/(^[A-Z]{1,2}[0-9R][0-9A-Z]?[\s]?[0-9][ABD-HJLNP-UW-Z]{2}$)/i",$postcode) || preg_match("/(^[A-Z]{1,2}[0-9R][0-9A-Z]$)/i",$postcode)) 
    {  
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

$ul = "ze3 9"; 
if (IsPostcode($ul)) { 
    $where = " 
    LEFT JOIN locations l ON l.name = b.location 
    WHERE l.postcode LIKE ".$dbh->quote($ul.'%').""; 

} 
else { 
    $where = " 
    LEFT JOIN locations l ON l.name = b.location 
    WHERE l.name LIKE ".$dbh->quote($ul.'%').""; 
} 

$query = "SELECT b.id, b.name, l.name, l.postcode 
      FROM business b 
      ".$where." 
      ORDER BY b.date DESC"; 

任何人都可以看到這個錯誤嗎?