2016-12-31 87 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"; 

任何人都可以看到这个错误吗?