允许用户在一个字段中搜索两个搜索词

时间:2016-12-31 17:03:49

标签: php mysql sql

我有没有办法让一个输入字段称为“位置”,并允许用户输入邮政编码或城镇名称来检索商家信息? 例如。布里斯托尔或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个查询?一个用于搜索邮政编码列,一个用于搜索城镇?

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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";

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