【问题标题】:Allow user to search two search terms in one field允许用户在一个字段中搜索两个搜索词
【发布时间】:2017-01-01 01:57:45
【问题描述】:

有没有一种方法可以让我拥有一个名为“位置”的输入字段,并允许用户输入邮政编码或城镇名称来检索公司列表? 例如。布里斯托尔或 BS6 6NX

下面是我目前的表结构

企业:(带有示例数据)
id - 1
名称 - Apples
位置 - 布里斯托尔
邮编 - 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 个查询?一个搜索邮政编码栏,一个搜索城镇?

【问题讨论】:

  • 你为什么使用子查询?
  • 您对上述示例数据的预期输出是什么?
  • 在给定搜索词的用户中列出企业名称。因此,例如,如果我输入“Bristol”或“BS6 4NQ”。将显示与此列匹配的所有商家。

标签: php mysql sql


【解决方案1】:
$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";

【讨论】:

  • 只有代码的答案总比没有好,但如果你能添加几行来解释代码在做什么,那就更好了......
  • 好的。下次我会记得的:)
【解决方案2】:

下面是我通过更多挖掘找到的一个解决方案。我首先确定是否输入了邮政编码或城镇。然后进行相应的查询。

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";

谁能看出这有什么问题?

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2016-07-15
    相关资源
    最近更新 更多