Condición de MySQL “O”

Echa un vistazo a esta consulta de MySQL y luego te mostraré lo que realmente quiero que haga …

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

El problema es que quiero que siempre coincida con el correo electrónico. En este caso (por ejemplo) si la fecha es igual a $Date_SixDaysAgo , se seleccionará de la consulta incluso si $Email no es igual a la columna de correo electrónico.

Entonces, en resumen, quiero que el correo electrónico sea siempre igual a la columna de correo electrónico, y si la consulta extrae una fecha igual a $Daye_TwoDaysAgo o $Date_ThreeDaysAgo etc., pero no es igual al correo electrónico, entonces no lo extraiga.

Creo que mi consulta se vería así, pero estoy bastante seguro de que no funcionará …

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

Use corchetes para agrupar las declaraciones 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')"); 

También puedes usar 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')"); 

Use corchetes:

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

Pero también debería echarle un vistazo al operador IN . Entonces puedes decir ‘fecha de entrada (‘ $ date1 ‘,’ $ date2 ‘, …) `

Pero si siempre tiene un conjunto de días consecutivos, ¿por qué no hace lo siguiente para la parte de la fecha?

 date <= $Date_Today AND date >= $Date_SevenDaysAgo 

Su pregunta es acerca de las precedencias del operador en mysql y Alex le ha mostrado cómo “anular” la precedencia entre paréntesis.

Pero en una nota lateral, si la date su columna es del tipo Date , puede usar las funciones de fecha y hora de MySQL para buscar los registros de los últimos siete días, como por ejemplo

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

(o tal vez Curdate () en lugar de Now ())

Envuelva su lógica Y entre paréntesis, así:

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

prueba esto

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

ser así

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