Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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/72.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 mysql邮政编码搜索_Php_Mysql - Fatal编程技术网

Php mysql邮政编码搜索

Php mysql邮政编码搜索,php,mysql,Php,Mysql,晚上好 我有一个物业网站的mysql数据库。有一个搜索表单,人们可以在同一字段中输入位置或邮政编码 SQL的一部分是 PostCode LIKE '$Loc% 我的问题是有些人输入这样的邮政编码:“l236yt”,有些人输入这样的空格“l236yt” 数据库包含带有空格的邮政编码,因此如何使其在有空格或没有空格的情况下工作 任何帮助都将不胜感激 感谢baz假设数据库中的值没有空格,只需将用户值清理为没有空格的值: $val = str_replace(' ', '', $val); 您可以将

晚上好

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

SQL的一部分是

PostCode LIKE '$Loc%
我的问题是有些人输入这样的邮政编码:“l236yt”,有些人输入这样的空格“l236yt”

数据库包含带有空格的邮政编码,因此如何使其在有空格或没有空格的情况下工作

任何帮助都将不胜感激


感谢baz

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

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

您可以将字符串转换为一个字符数组,并搜索空格,如果找不到,则可以继续插入空格(在6个字符的邮政编码中,空格将始终位于第三个字符之后,在7个字符的邮政编码中,空格将始终位于第四个字符之后,因此您可以使用正则表达式非常简单地执行此操作。我相信也有5个字符长的邮政编码,它们类似于A1 1AA,因此在第二个字符之后,您将找到空格


由于我对语言缺乏了解,我无法帮助输入精确的代码,但祝你好运!

希望输入一个有效的邮政编码(带空格或不带空格),并将其分解为多个组成部分,然后在适当的位置使用空格整齐地返回

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,
    );
}

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

PostCode = "$Loc"
这将为您提供两个选项:

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


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

您可以使用PHP@Pekka웃 或者使用MySQL。@njk我会在应用程序级别这样做,以防出现其他需要过滤的字符。在mySQL中,这将很快让其他海报感到尴尬,请注意,他说邮政编码是用空格收集的!