Php 允许用户在一个字段中搜索两个搜索词
是否有一种方法可以使用一个名为“Location”的输入字段,允许用户键入邮政编码或城镇名称来检索企业列表?例如,布里斯托尔或BS6 6NX 下面是我目前的表格结构 业务:(附示例数据)Php 允许用户在一个字段中搜索两个搜索词,php,mysql,sql,Php,Mysql,Sql,是否有一种方法可以使用一个名为“Location”的输入字段,允许用户键入邮政编码或城镇名称来检索企业列表?例如,布里斯托尔或BS6 6NX 下面是我目前的表格结构 业务:(附示例数据) id-1 名称-苹果 位置-布里斯托尔 邮政编码-bs5 6nx 位置:(带示例数据) id-1 名称-布里斯托尔 邮政编码-bs5 6 我目前的查询是: $query = " SELECT b.id, b.name, b.category, b.thumb_picture, b.loc
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";
目前只适用于城镇名称
更新:
似乎是一个解决方案,先确定字段是邮政编码还是城镇,然后根据结果可能有2个查询?一个用于搜索邮政编码列,另一个用于搜索城镇?下面是我通过进一步挖掘找到的一个解决方案。我首先确定是否输入了邮政编码或城镇。然后执行适当的查询
$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";
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";
有人能看出这有什么问题吗?为什么要使用子查询?上面示例数据的预期输出是什么?在用户给定的搜索词中列出企业名称。例如,如果我输入'Bristol'或'BS6 4NQ'。所有有一列匹配的企业都会出现。只有代码的答案总比没有好,但是如果你能添加几行来解释代码在做什么就更好了……好的。下次我会记得:)