mySQL查询 - 多个可能的特定值

时间:2011-07-11 17:14:23

标签: php mysql sql

我目前正在使用一个相当冗长的语句查询我们的数据库,因为它的作用很小。

fieldname like 'expected_result_up' AND `result_text` not like 'obsolete' and
AK47_testsection_id like 436 and ( `resultsfields_value` like 240 or
`resultsfields_value` like 846 or `resultsfields_value` like 1000 )

我正在尝试从“resultsfields_value”获取一个值,使其可以是240,846或1000.当前查询有效,它返回每个值。但它只能通过heidiSQL界面进行手动查询。

当我通过php运行不同语法的相同查询时,我只返回最后一个“或”(1000)。 php DB查询是:

"SELECT point_id FROM v_ak47_test_point WHERE ak47_testsection_id= $secID
and result_text != 'obsolete' and fieldname like 'expected_result_up' and 
(resultsfields_value = 240 or resultsfields_value = 846 or resultsfields_value =
1000)"

是否有更优雅的方式来指定多种独特的可能性?

2 个答案:

答案 0 :(得分:2)

您可以使用IN子句:

SELECT point_id 
FROM v_ak47_test_point 
WHERE ak47_testsection_id= $secID
AND result_text != 'obsolete'
AND fieldname = 'expected_result_up'
AND resultsfields_value IN (240, 846, 1000)

答案 1 :(得分:1)

使用IN ()子句。因为你没有在最后三个OR条件中放置parens,所以最后一个条件(如果为true)将覆盖WHERE子句中的所有其他条件。

SELECT point_id FROM v_ak47_test_point WHERE ak47_testsection_id= $secID
  and result_text != 'obsolete' and fieldname like 'expected_result_up' and 
  resultsfields_value = IN (140, 846, 1000)

此外,由于%没有fieldname like 'expected_result_up'通配符,因此请勿使用简单LIKE所在的fieldname = 'expected_result_up'。 (除非那只是占位符数据,而你实际上打算使用更复杂的东西)