您好我在编写一个完美的SQL查询时会遇到困难,该查询将搜索地址或邮政编码(英语)。
我将邮政编码存储为“W1Y TF7”。如果用户使用“W1YTF7”(没有空格)进行搜索,当它假设返回W1Y TF7时,它会给我任何结果。
这是我的查询:
SELECT DISTINCT *
FROM venue
WHERE Name LIKE '%$searchValue%'
OR Postcode LIKE '%$searchValue%'
OR Address2 LIKE '%$searchValue%'
OR Postcode LIKE '$searchValue%'
答案 0 :(得分:2)
我可能会在没有空格的情况下将邮政编码存储在数据库中。然后,您可以在运行SQL查询之前简单地从字符串中删除空格。
如果要保留当前的设置,为什么不在输入到SQL级别之前将输入转换为预期的格式?如果它不存在,只需添加空格。
答案 1 :(得分:0)
嗯,第一个陷阱:如果事情没有发生,我可以看到你在这里遇到一些问题(如果$ searchValue是一个空字符串或一个非常小的字符串)。这将总是返回一个非常大的数据集(可能需要相当长的时间)。
对于邮政编码,您可以执行(LEFT(Postcode, 3) = LEFT($searchValue, 3) AND RIGHT(Postcode, 3) = RIGHT($searchValue, 3))
另外,您可能希望查看预处理语句和值绑定,但这完全是另一个问题
答案 2 :(得分:0)