Подтвердить что ты не робот

MySQL "Или" Условие

Проверьте этот 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 не соответствует столбцу электронной почты.

Итак, короче говоря, я хочу, чтобы электронное письмо всегда было равно столбцу электронной почты, и если запрос вытягивает дату, равную $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'");
4b9b3361

Ответ 1

Используйте скобки для группировки операторов 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')");

Ответ 2

Используйте скобки:

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. Таким образом, вы можете сказать, что нужно использовать IN ('$ date1', '$ date2',...) `

Но если у вас всегда есть ряд последовательных дней, почему бы вам не сделать следующее для части даты

date <= $Date_Today AND date >= $Date_SevenDaysAgo

Ответ 3

Ваш вопрос о приоритетах операторов в mysql и Алекс показал вам как "переопределить" приоритет скобками.

Но на стороне примечания, если ваш столбец date имеет тип date, вы можете использовать Функции даты и времени MySQL для получения записей за последние семь дней, например,

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

(или, может быть, Curdate() вместо Now())

Ответ 4

Оберните логику 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')");

Ответ 5

попробуйте это

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'"     
   );

my быть таким

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