我有世界上最简单的表格,用于查找英国邮政编码的lat/lng值(加载完整的英国邮政编码数据):
CREATE TABLE postcodes (
postcode char(7) NOT NULL,
lat double(10,6) NOT NULL,
lng double(10,6) NOT NULL,
KEY postcode (postcode)
)
Run Code Online (Sandbox Code Playgroud)
"邮政编码"字段中的邮政编码在前半部分的末尾有2位数字,或者一个空格.我认为这个空间对于它们如何匹配(??)的完整性很重要,而且我不想删除表中的空格,因为我还要拔出用于显示目的的邮政编码(我不喜欢我想要一个重复的领域,因为我很挑剔!).例子:
'LE115AF', 'BS6 5EE', 'W1A 1AA', 'BS216RS', 'M3 1NH'
Run Code Online (Sandbox Code Playgroud)
所以,有些有空格,有些则没有空格.大多数是7个字符,有些只有6个字符.
无论如何,重点是我希望用户能够输入邮政编码查询,包括部分邮政编码,有或没有空格,并且如果他们的输入字符串有效,总是找到匹配(即他们不输入完整或部分邮政编码,表中没有.
这是我到目前为止所做的事情(在PHP的帮助下):
{...} WHERE `postcode` LIKE '" . str_replace(' ','%',$query) . "%' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
这适用于:
但不适用于这些查询:
我猜我需要以某种方式做一些MySQL字符串函数魔法,如果行的邮政编码字段中有空格,并相应地调整我的WHERE子句逻辑?有人对最佳方法有任何建议吗?我理想的还想: