2011-12-22 11 views
22

Control hacia fuera este MySQL de consulta y luego te voy a mostrar lo que realmente quiero que haga ...MySQL "O" Condición

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 con esto es que yo quiero que siempre corresponda 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.

Así que, 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 coincide con el correo electrónico, no lo extraiga.

Creo que mi consulta se vería algo así como esto, pero estoy bastante seguro de que no va a 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'"); 
+1

soportes son de su amigo! – ChelseaStats

Respuesta

48

Utilice corchetes para agrupar el quirófano declaraciones.

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 puede utilizar EN

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

Use paréntesis:

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 debe alsos echar un vistazo al operador IN. Entonces puede decir 'fecha de entrada (' $ fecha1 ',' $ fecha2 ', ...) `

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

date <= $Date_Today AND date >= $Date_SevenDaysAgo 
+2

O posiblemente use el operador BETWEEN. – liquorvicar

0

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

tu pregunta es sobre el operator precedences en mysql y Alex has shown you la forma de "anular" la precedencia entre paréntesis.

Pero en una nota aparte, si su columna date es del tipo Date puede usar MySQL's date and time functions para buscar los registros de los últimos siete días, como p. Ej.

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

(o tal vez CURDATE() en lugar de Ahora())

-4

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

Mi ser así

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

¿Ha considerado eliminar esta respuesta? Recuperarías tu reputación perdida. –