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