匹配完整字符串与MySQL列中的部分值(postcodes)

时间:2016-05-10 11:55:44

标签: php mysql

我认为这个问题的解决方案应该很简单,但我无法找到解决问题的方法。

我正在使用英国邮政编码。我的参考db看起来像这样:

+----+----------+----------+
| ID | postcode | leadtime |
+----+----------+----------+
|  1 | AB10     |        1 |
|  2 | AB11     |        2 |
|  3 | B7       |        3 |
|  4 | SE16WD   |        1 |
+----+----------+----------+

此表中的值仅代表完整英国邮政编码的前半部分,但这是我们需要检查的全部内容。

现在,用户有一个表单,他们可以在其中键入完整的邮政编码,以检查提前期是多少(然后将完整的邮政编码用作递送地址的一部分)。

英国邮政编码可以有不同的长度,你可以在第一个和第二个半之间输入或不输入空格。现在我有一些PHP代码基本上可以接受用户键入的任何内容,并尝试通过所有不同的布局可能性运行它,但它并不总是有效。

我想在MySQL中找到一种方法。我开始玩

SELECT leadtime FROM myTable WHERE postcode LIKE '$postcode%'

但这仅适用于前几位数字。只要用户输入整个邮政编码,此查询就无法在表格中找到任何内容。

我不能为我的生活,找到一种方法来匹配这两个价值观!!

我确定我在这里遗漏了一些非常基本的东西!

非常感谢您的时间和帮助。

编辑MySQL表以更好地反映要检查的参考邮政编码的多样性。

4 个答案:

答案 0 :(得分:2)

SELECT * FROM user;
+---------+--------+
| user_id | user   |
+---------+--------+
|       3 | George |
|       1 | John   |
|       2 | Paul   |
|       4 | Ringo  |
+---------+--------+

SELECT * FROM user WHERE 'Ringo Starr' LIKE CONCAT(user,'%');
+---------+-------+
| user_id | user  |
+---------+-------+
|       4 | Ringo |
+---------+-------+

答案 1 :(得分:0)

除了从空格中剥离邮政编码并将数据库'邮政编码'字段与该邮政编码的4个字符子串进行比较之外,我没有别的办法。

答案 2 :(得分:0)

你可以随时:

  • 制作更广泛的"使用substr($postcode, 0,2);
  • 进行选择
  • 然后遍历结果并使用正则表达式从每个结果的开头剪掉字母字符; 然后使用intval();
  • 将数字字符串解析为数字
  • 最后进行数字范围比较以缩小结果范围。

上述技术可能有点复杂,但您可以更好地控制最终结果。

如果您需要一个如何实现此目的的代码示例,请发表评论,我将更新答案。

答案 3 :(得分:0)

试试这个

用通配符替换空格

select USERNAME FROM LOGIN_USERS WHERE USERNAME LIKE CONCAT('%',REPLACE('user_inPut',' ','%'),'%');