Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许用户在一个字段中搜索两个搜索词_Php_Mysql_Sql - Fatal编程技术网

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

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

是否有一种方法可以使用一个名为“Location”的输入字段,允许用户键入邮政编码或城镇名称来检索企业列表?例如,布里斯托尔或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";
目前只适用于城镇名称

更新:


似乎是一个解决方案,先确定字段是邮政编码还是城镇,然后根据结果可能有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'。所有有一列匹配的企业都会出现。只有代码的答案总比没有好,但是如果你能添加几行来解释代码在做什么就更好了……好的。下次我会记得:)