我有没有办法让一个输入字段称为“位置”,并允许用户输入邮政编码或城镇名称来检索商家信息? 例如。布里斯托尔或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)
$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";
任何人都可以看到这个错误吗?