mysql查询搜索地址或邮政编码

时间:2010-10-12 00:38:26

标签: php sql mysql

您好我在编写一个完美的SQL查询时会遇到困难,该查询将搜索地址或邮政编码(英语)。

我将邮政编码存储为“W1Y TF7”。如果用户使用“W1YTF7”(没有空格)进行搜索,当它假设返回W1Y TF7时,它会给我任何结果。

VENUE

  • VenueID
  • 名称
  • 地址1
  • 地址2
  • 邮编
  • PhoneNumer
  • URL

这是我的查询:

SELECT DISTINCT *
 FROM venue 
WHERE Name LIKE '%$searchValue%' 
   OR Postcode LIKE '%$searchValue%'
   OR Address2 LIKE '%$searchValue%' 
   OR Postcode LIKE '$searchValue%' 

3 个答案:

答案 0 :(得分:2)

我可能会在没有空格的情况下将邮政编码存储在数据库中。然后,您可以在运行SQL查询之前简单地从字符串中删除空格。

如果要保留当前的设置,为什么不在输入到SQL级别之前将输入转换为预期的格式?如果它不存在,只需添加空格。

答案 1 :(得分:0)

嗯,第一个陷阱:如果事情没有发生,我可以看到你在这里遇到一些问题(如果$ searchValue是一个空字符串或一个非常小的字符串)。这将总是返回一个非常大的数据集(可能需要相当长的时间)。

对于邮政编码,您可以执行(LEFT(Postcode, 3) = LEFT($searchValue, 3) AND RIGHT(Postcode, 3) = RIGHT($searchValue, 3))

另外,您可能希望查看预处理语句和值绑定,但这完全是另一个问题

答案 2 :(得分:0)

您可以创建一个搜索列,创建一个新的字段,将SearchColumn称为场地表,然后创建一个SELECT和UPDATE trigger,在您要使用的所有字段中设置相同的值(VenueID + Name +地址1 +地址2 +城市+邮政编码+ PhoneNumer + URL)。恩。如果你插入。  将其作为index包含在内也很不错。

然后你需要:

SELECT DISTINCT Name
      FROM venue
       WHERE SearchColumn LIKE '%Search value%'