2012-07-25 53 views
0

我不知道如何解决这种情况。问题出在我用来从zip_codes表中检索位置的OR运算符。例如,如果有人只输入“NY”作为输入,我只想检索该字段。SQL查询使用OR运算符从关键字检​​索匹配的字段

表的数据是这样的:

+------+-------+--------------------------------------+ 
| zip | state | city         | 
+------+-------+--------------------------------------+ 
| 12345| NY | Schenectady       | 
+------+-------+--------------------------------------+ 

而且例如可能的输入为“NY”,所以我的查询如下:

SELECT zip, state, city 
    FROM zip_codes 
WHERE name = 'NY' 
    OR zip = 'NY' 
    OR city ='NY' 
LIMIT 1 

我想找回刚刚在现场状态在上述情况下,因为这意味着用户仅将状态设置为参考。如果他们进入“Schenectady” - 城市领域,如果他们进入“12345” - 只是邮政编码领域等。

是的,我可以从一堆如果设置在PHP中,但也许是一些SQL查询外我不知道

回答

4
select *, case when zip = 'NY' 
       then 'zip' 
       when name = 'NY' 
       then 'name' 
       when city = 'NY' 
       then 'city' 
      end as found 
from zip_codes 
where 'NY' in (name, zip, city) 
limit 1 
+0

是否有可能使更优雅的'哪里'纽约'在(名称,邮编,城市)'? – triclosan 2012-07-25 10:10:06

+0

好的。添加它。 – 2012-07-25 10:13:20

+0

非常,非常,非常感谢! :) – 2012-07-25 10:17:53