全晚。
我有一个属性网站的mysql数据库。有一个搜索表单,人们可以在同一个字段中输入位置或邮政编码。
SQL的一部分是
PostCode LIKE '$Loc%
我的问题是有些人输入这样的邮政编码:“l236yt”和一些像这样的空间“l23 6yt”。
数据库包含带有空格的邮政编码,那么如何使用或不使用空间?
非常感谢任何帮助
谢谢巴兹
答案 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”)时,这也会有所帮助,但只有在邮政编码和位置之间存在一对多关系时才有用。