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'");
Ответы
Ответ 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'.........