mysql邮政编码搜索

时间:2013-02-15 21:44:05

标签: php mysql

全晚。

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

SQL的一部分是

PostCode LIKE '$Loc%

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

数据库包含带有空格的邮政编码,那么如何使用或不使用空间?

非常感谢任何帮助

谢谢巴兹

4 个答案:

答案 0 :(得分:0)

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

$val = str_replace(' ', '', $val);

答案 1 :(得分:0)

您可以将字符串转换为字符数组,并搜索空格,如果找不到空格,则可以继续插入空格(空格将始终位于6个字符的邮政编码中的第3个字符之后,在7个字符的邮政编码中的第四个字符之后,所以你可以使用正则表达式来完成这个。我相信还有5个字符长的邮政编码,这些就像A1 1AA,所以在第二个字符之后你'找到空间。

由于我对语言缺乏了解,我无法提供准确的代码,但祝你好运!

答案 2 :(得分: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,
    );
}

答案 3 :(得分:0)

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

PostCode = "$Loc"

这为您提供了两个选项:

1)清理您的输入。邮政编码遵循众所周知的格式,因此可以将某人输入的值转换为您期望的值。然后你可以搜索。由于$ Loc与您在数据库中的确切匹配,因此在您的数据库中查找速度非常快(前提是您已经为该字段建立了索引!)。

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