2011-12-22 65 views
22

このMySQLクエリをチェックアウトした後、私は本当にそれが何をしたいのかを紹介します...MySQLの「OR」条件

mysql_query(" 
SELECT * FROM Drinks WHERE 
    email='$Email' 
    AND date='$Date_Today' 
    OR date='$Date_Yesterday' 
    OR date='$Date_TwoDaysAgo' 
    OR date='$Date_ThreeDaysAgo' 
    OR date='$Date_FourDaysAgo' 
    OR date='$Date_FiveDaysAgo' 
    OR date='$Date_SixDaysAgo' 
    OR date='$Date_SevenDaysAgo'"); 

それに伴う問題は、私はそれが常に一致させたいということですEメール。この場合、たとえば、日付が$Date_SixDaysAgoの場合、$Emailがメールの列と等しくなくても、クエリから選択されます。

だから、要するに、私は電子メールが常にメール欄に等しくなるようにしたい、とクエリが $Daye_TwoDaysAgoまたは $Date_ThreeDaysAgoなどに等しい日付を引っ張る..しかし、電子メールと等しくない場合は、それを引っ張らないでください。 ...グループ]またはステートメントに

mysql_query(" 
    SELECT * FROM Drinks WHERE 
    email='$Email' 
    AND date='$Date_Today 
    || $Date_Yesterday 
    || $Date_TwoDaysAgo 
    || $Date_ThreeDaysAgo 
    || $Date_FourDaysAgo 
    || $Date_FiveDaysAgo 
    || $Date_SixDaysAgo 
    || $Date_SevenDaysAgo'"); 
+1

括弧のようで、私のしてみてくださいあなたの友達です! – ChelseaStats

答えて

48

Useブラケットを

は、私は私のクエリは一種の次のようになります推測するが、私はそれが動作しません確信しています。

mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND 
    (date='$Date_Today' 
    OR date='$Date_Yesterday' 
    OR date='$Date_TwoDaysAgo' 
    OR date='$Date_ThreeDaysAgo' 
    OR date='$Date_FourDaysAgo' 
    OR date='$Date_FiveDaysAgo' 
    OR date='$Date_SixDaysAgo' 
    OR date='$Date_SevenDaysAgo' 
    ) 
"); 

をしかし、あなたはalsosはIN演算子を見ている必要があります:

mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND (date='$Date_Today' OR date='$Date_Yesterday' OR date='$Date_TwoDaysAgo' OR date='$Date_ThreeDaysAgo' OR date='$Date_FourDaysAgo' OR date='$Date_FiveDaysAgo' OR date='$Date_SixDaysAgo' OR date='$Date_SevenDaysAgo')"); 

また

mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND date IN ('$Date_Today','$Date_Yesterday','$Date_TwoDaysAgo','$Date_ThreeDaysAgo','$Date_FourDaysAgo','$Date_FiveDaysAgo','$Date_SixDaysAgo','$Date_SevenDaysAgo')"); 
10

使用括弧で使用することができます。

いつも連続した日があれば、日付の部分には次のようにしないでください。

(英語)
date <= $Date_Today AND date >= $Date_SevenDaysAgo 
+2

または、おそらくBETWEEN演算子を使用します。 – liquorvicar

0

このように、括弧であなたのAND論理をラップ:

mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND (date='$Date_Today' OR date='$Date_Yesterday' OR date='$Date_TwoDaysAgo' OR date='$Date_ThreeDaysAgo' OR date='$Date_FourDaysAgo' OR date='$Date_FiveDaysAgo' OR date='$Date_SixDaysAgo' OR date='$Date_SevenDaysAgo')"); 
4

あなたの質問は、MySQLでoperator precedencesと括弧で優先度を "上書き" する方法Alex has shown youについてです。

ただし、Dateの列の場合は、MySQL's date and time functionsを使用して過去7日間のレコードを取得することができます(例: (今、または多分CURDATE()の代わりに、())

SELECT 
    * 
FROM 
    Drinks 
WHERE 
    email='$Email' 
    AND date >= Now()-Interval 7 day 

-4

この

mysql_query(" 
SELECT * FROM Drinks WHERE 
    email='$Email' 
    AND date='$Date_Today' 
    OR date='$Date_Yesterday', '$Date_TwoDaysAgo', '$Date_ThreeDaysAgo', '$Date_FourDaysAgo', '$Date_FiveDaysAgo', '$Date_SixDaysAgo', '$Date_SevenDaysAgo'"  
    ); 

この

OR date='$Date_Yesterday' oR '$Date_TwoDaysAgo'......... 
+2

あなたはこの回答を削除すると考えましたか?あなたは失った評判を取り戻すでしょう。 –