1

晚上所有。

我有一个房地产网站的 mysql 数据库。有一个搜索表单,人们可以在同一字段中输入位置或邮政编码。

SQL的一部分是

PostCode LIKE '$Loc%

我的问题是有些人输入这样的邮政编码:“l236yt”,有些人输入这样的空格“l23 6yt”。

数据库包含带有空格的邮政编码,那么如何使它在有或没有空格的情况下工作?

任何帮助将不胜感激

谢谢巴兹

4

4 回答 4

0

您的首要任务是从查询中删除 LIKE 条件。使用 LIKE 条件会强制 MySQL 评估表中的每一行,而且效率非常低。除非绝对必要,否则尽量避免使用 LIKE。为了更改查询的这一部分,您需要将其替换为:

PostCode = "$Loc"

这为您提供了两个选项:

1)清理您的输入。邮政编码遵循众所周知的格式,因此可以将某人输入的值转换为您期望的值。然后就可以继续搜索了。由于 $Loc 将完全匹配您在数据库中的内容,因此在您的数据库中找到它会非常快(当然前提是您已经索引了该字段!)。

2)用多个值重载数据库以表示相同的邮政编码。这意味着您可以将“l236yt”和“l23 6yt”都放入数据库中,并将它们当作不同的值来处理。当您只想搜索邮政编码的第一部分(例如“l23”)时,这也很有帮助,但只有在邮政编码和位置之间存在一对多关系时才有效。

于 2013-03-05T00:58:56.143 回答
0

假设数据库中的值没有空格,只需将用户值清理为没有空格的值:

$val = str_replace(' ', '', $val);
于 2013-02-15T21:46:18.823 回答
0

您可以将字符串转换为字符数组,然后搜索空格,如果找不到,则可以继续插入空格(空格将始终位于 6 字符邮政编码中的第三个字符之后,之后7个字符的邮政编码中的第四个字符,所以你可以使用正则表达式很简单地做到这一点。我相信也有5个字符长的邮政编码,这些会像A1 1AA,所以在第二个字符之后你会发现空间。

由于我缺乏语言知识,我无法提供精确的代码,但祝你好运!

于 2013-02-15T21:46:43.800 回答
0

需要一个有效的邮政编码作为输入(带或不带空格),并将其分解为组成部分,并在适当的位置用空格整齐地返回它

function parsePostcode($postcode) {
    $postcode = preg_replace('/\s*/','',strtoupper($postcode));

    $sector = substr($postcode,0,-2);
    $outcode = $district = substr($sector,0,-1);

    list($area) = sscanf($district,'%[A-Z]');
    $incode = substr($postcode,-3);

    return array(
        'postcode'  => $postcode,
        'formatted' => $outcode.' '.$incode,
        'area'      => $area,
        'district'  => $district,
        'sector'    => $sector,
        'outcode'   => $outcode,
        'incode'    => $incode,
    );
}
于 2013-02-15T21:51:58.773 回答