我目前正在使用一个相当冗长的语句查询我们的数据库,因为它的作用很小。
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)"
是否有更优雅的方式来指定多种独特的可能性?
答案 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'
。 (除非那只是占位符数据,而你实际上打算使用更复杂的东西)