2011-12-22 30 views
22

看看这个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

括号是你的朋友! – ChelseaStats 2011-12-22 13:18:26

回答

48

使用括号组或声明。

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

您也可以使用

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

使用括号:

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操作。所以,你可以说在DATE('$ date1','$ date2',...)'

但是,如果你总是有一组连续的日子,你为什么不做以下日期部分

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

或者可能使用BETWEEN运算符。 – liquorvicar 2011-12-22 14:00:39

0

环绕你与逻辑在括号中,类似这样的:

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

试试这个

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'......... 
+2

你有没有考虑删除这个答案?你会得到你失去的声誉。 – 2016-05-13 19:57:06