2016-05-17 12 views
3

私はこのデータベースから statement_fromまたはusername = = $usernameのどちらかを入力しようとしていますが、これは正しく動作しません。私はこれまでの質問を見てきましたが、この質問に以前の回答をどのように実装するかは不明です。私が達成しようとしている何SQL WHERE、OR AND AND

"SELECT * FROM `usr_statements` WHERE `statement_from` = '$username' 
    OR `username` = '$username' AND `statement_timestamp` > '$start_date' 
    AND `statement_timestamp` < '$end_date' ORDER BY `statement_ref` DESC" 

statement_fromまたはusernameは= $usernameにあるデータベース内のすべての結果を選択することです。

+1

コードをもっと明白にするために、 '... $ where(statement_from、username)...'を実行することができます! – jarlh

+1

'> = $ start_date AND statement_timestamp <$ end_date'など、より大きいか等しい日付範囲が表示されるのがより一般的です –

+1

@ Used_By_既にこれは本当です。私は、次の声明日付が生成された正確な秒で取引が行われた場合、いずれの声明にも表示されないことを前提としています。 –

答えて

8

ANDはそうANDが最初に評価されますORより優先が高いので、現在お使いのクエリがこの

WHERE `statement_from` = '$username' 
    OR (`username` = '$username' AND `statement_timestamp` > '$start_date') 
    AND `statement_timestamp` < '$end_date' 

のように検証されます。 >AND -

あなたは演算子の優先順位がNOTあるコメント

SELECT * FROM `usr_statements` 
WHERE $username in (statement_from, username) 
    AND `statement_timestamp` > '$start_date' 
    AND `statement_timestamp` < '$end_date' 
ORDER BY `statement_ref` DESC 
+1

ちょうど大括弧でああ、私は本当に高速応答に感謝します。ありがとうございました。 –

+1

私は同じと言いますが、論理演算子の優先度を追加してください; – AxelH

+1

演算子が本当に便利であり、演算子の順番を理解するのに役立つと考えています。未来。 –

0

Jarlhで述べたように、あなたがこれを行うにはIN演算子を使用することができ、適切なカッコまた

SELECT * FROM `usr_statements` 
WHERE (`statement_from` = '$username' 
    OR `username` = '$username') 
    AND `statement_timestamp` > '$start_date' 
    AND `statement_timestamp` < '$end_date' 
ORDER BY `statement_ref` DESC 

を追加する必要があります - >ORなので、ここでいくつかの偽装が必要です:

"SELECT * FROM `usr_statements` WHERE (`statement_from` = '$username' 
    OR `username` = '$username') AND `statement_timestamp` > '$start_date' 
    AND `statement_timestamp` < '$end_date' ORDER BY `statement_ref` DESC"