このMySQL
クエリを確認してから、私が本当にやりたいことをお見せしましょう...
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'");
それに関する問題は、私がそれが常に電子メールと一致することを望むことです。この場合(たとえば)、日付が$Date_SixDaysAgo
と等しい場合、$Email
が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'");
括弧を使用して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')");
INも使用できます
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')");
ブラケットを使用します。
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'
)
");
ただし、IN
演算子も確認してください。したがって、「date IN( '$ date1'、 '$ date2'、...)」と言うことができます
ただし、連続した日が常にある場合は、日付部分について次のことを行わないでください。
date <= $Date_Today AND date >= $Date_SevenDaysAgo
あなたの質問は、mysqlの 演算子の優先順位 および Alexが示しています 括弧で優先順位を「オーバーライド」する方法についてです。
しかし、副次的に、列date
のタイプが Date
の場合、 MySQLの日時関数 を使用して、たとえば、過去7日間の記録.
SELECT
*
FROM
Drinks
WHERE
email='$Email'
AND date >= Now()-Interval 7 day
(またはNow()ではなくCurdate())
次のように、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')");