开发一个网站,并试图重新回到(聪明的)SQL查询等,今晚我的思绪已经完全消失了!
有一个网站http://www.ufindus.com/,其中有一个文本框,允许您输入地名或邮政编码/邮政编码。我正在尝试做类似的事情,但我在SQL上是垃圾 - 所以你如何构建一个可能潜在地查看2列(即地点和邮政编码)的SQL语句,因为你无法查询两个字段的相同值,例如
place = 'YORK' AND postcode = 'YORK'
或
place = 'YO21 5EA' AND postcode = 'YO21 5EA'
所以你必须把一些逻辑设置得足够智能,以检测它是否看起来像地名或邮政编码 - 这对我来说似乎太复杂了!任何帮助将不胜感激。
答案 0 :(得分:7)
您可以使用“OR”来完成工作。例如,
place ='YORK'或postcode ='YORK'
使用LIKE语句也可以做得更好,如
地点LIKE'YORK%'或邮政编码LIKE'YORK%'
(假设地点和邮政编码都是基于字符的列)
答案 1 :(得分:3)
为什么不使用OR代替AND?
place = @textboxvalue OR post = @textboxvalue
答案 2 :(得分:0)
尝试匹配地点和邮政编码有什么问题?如果我把'York'和(某处)恰好是一个有效的邮政编码,我应该得到那个结果。至于防止输入两次相同的东西,那么,你可以在进行数据库调用之前处理验证。
阿。猜猜我的上升速度有点慢。是的......其他人建议的是正确的,'或'是您正在寻找的。我误解了。
答案 3 :(得分:0)
好的,首先我假设您有一个表格,其中包含邮政编码到地名的映射。
让我们使用列'邮政编码'和' postplace '来调用此表'邮政编码'。这两种都是char型。
然后..无论你做什么,请确保用户的输入不是动态sql的一部分。确保它是参数。否则,您正在邀请SQL注入攻击,这可能会毁了您的一天。这是重要。
我们的用户输入位于 @textboxstring 中。
鉴于此,您可以像这样获得邮政编码和邮寄地址:
select @textboxstring = RTRIM(@textboxstring) + '%';
select postcode, postplace
from postcode
where postcode like @textboxstring or postplace like @textboxstring;
请注意,我正在修改@textboxstring以获得与like
的通配符匹配,而不必使用动态sql。
如果邮政编码是整数,则需要在执行sql之前将输入转换为int。所以使用@textboxint也可以这样做:
select @textboxstring = RTRIM(@textboxstring) + '%';
select postcode, postplace
from postcode
where postcode = @textboxint or postplace like @textboxstring;
哦,你需要处理你的搜索可以有多个结果。你可能只想要第一行。