MySQL "Or" Условие - PullRequest
       17

MySQL "Or" Условие

25 голосов
/ 22 декабря 2011

Проверьте этот 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'");

Ответы [ 5 ]

57 голосов
/ 22 декабря 2011

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

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

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.Таким образом, вы можете сказать «дата IN» («$ date1», «$ date2», ...) `

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

date <= $Date_Today AND date >= $Date_SevenDaysAgo
4 голосов
/ 22 декабря 2011

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

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

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

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

0 голосов
/ 22 декабря 2011

попробуйте

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'.........
0 голосов
/ 22 декабря 2011

Оберните свою логику 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')");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...