2011-07-11 1 views
1

私は現在、どれほどの時間がかかっているかというと、かなり長い文を使用してデータベースにクエリしています。mySQLクエリ - 複数の可能な特定の値

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) 

私はそれはそれは価値の一つ一つを返し、240、846、または1000現在のクエリが動作のいずれかになり得るような「resultsfields_value」から値を取得しようとしています。しかし、これはheidiSQLインターフェースを介した手動照会でのみ機能します。

phpで異なる構文の同じクエリを実行すると、最後の "or"(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

"OR'ed"フィールドの括弧は、何かを間違いなく意味しています... –

答えて

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) 
+0

は確かにhedisqlで動作し、今度はPHPでチェックしています。いずれにせよ、ありがとう! – Joshua

+0

Aldoはフィールド名があらかじめ決められていると仮定していますので、 'LIKE 'を使うのは意味がありません。' =' – prodigitalson

1

IN()句を使用してください。最後の3つの条件の前後に括弧を入れなかったので、最後の条件は真の場合WHERE句の他のすべてを上書きします。あなたはfieldname like 'expected_result_up'で何%ワイルドカードを持っていないので

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 = 'expected_result_up'がどうなるLIKEを使用しないでください。

+0

を使うほうが良いでしょう。実際には逆です。まだ掃除されていません。実際のPHP呼び出しは= – Joshua

関連する問題