条件SQL取决于数据是否存在

时间:2014-02-24 16:39:36

标签: php mysql sql

是否可以像这样进行条件SQL查询:

我有一个表格要求最大值,最小值(两个必需值),然后输入1,2或3个不同的邮政编码。

如果输入的邮政编码只有1个,我希望只用一个邮政编码查询数据库,如下:

SELECT * FROM first_page_data WHERE
value_min > 1
AND
value_max < 5
AND
postcode1 < <<geocode formula here>>

但如果输入两个或三个邮政编码,我想将其更改为:

SELECT * FROM first_page_data WHERE
value_min > 1
AND
value_max < 5
AND
(postcode1 < <<geocode formula here>>
OR
postcode2 < <<geocode formula here>>
OR
postcode3 < <<geocode formula here>>)

如果我只使用底部查询,并且没有数据用于后两个邮政编码,那么它将返回错误。我是否必须使用PHP条件语句手动检查邮政编码,然后使用连接将它们连接到一个查询中,或者是否有一种巧妙的方法在SQL查询中执行此操作,这意味着我可以取消条件语句?


修改

为清楚起见,我遗漏的地理编码公式如下:

((((acos(sin((".$_SESSION['fsea_lat']."*pi()/180)) * sin((`geo_lat1`*pi()/180))+cos((".$_SESSION['fsea_lat']."*pi()/180)) * cos((`geo_lat1`*pi()/180)) * cos(((".$_SESSION['fsea_lon']."- `geo_lon1`)* pi()/180))))*180/pi())*60*1.1515) * (1.609344/1000)) < ".$_SESSION['frange']."

计算设定点和输入的邮政编码之间的距离,如果它小于范围变量frange,则满足条件。如果三个邮政编码中的任何一个满足此公式,我希望查询返回该行。

但是当然如果邮政编码2和3中没有数据,公式将尝试使用数据库表中的NULL进行计算,并且(虽然可能不是正式错误)结果将是错误的!< / p>

1 个答案:

答案 0 :(得分:0)

也许使用IN构造

postcode1 IN (1,2,3)