Php MySQL“;或;条件

Php MySQL“;或;条件,php,mysql,select,conditional-statements,Php,Mysql,Select,Conditional Statements,查看这个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

查看这个
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\u SixDaysAgo
,则即使
$Email
不等于Email列,也会从查询中选择该日期

因此,简而言之,我希望电子邮件始终等于电子邮件列,如果查询提取的日期等于
$Daye\u TwoDaysAgo
$date\u 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'");

使用括号将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')");
您也可以在中使用

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')");
使用括号:

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 IN($date1’,$date2’,…)”

但是,如果你总是有一组连续的日期,为什么不为日期部分执行以下操作呢

date <= $Date_Today AND date >= $Date_SevenDaysAgo
date=$date\u SevenDaysAgo

将您的和逻辑用括号括起来,如下所示:

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中的优先级以及如何用括号“覆盖”优先级

但另一方面,如果您的列
date
是您可以用来获取过去七天记录的类型,例如

SELECT
  *
FROM
  Drinks
WHERE
  email='$Email'
  AND date >= Now()-Interval 7 day
(或者用Curdate()代替Now())

试试这个

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

或者可能使用BETWEEN运算符。您是否考虑过删除此答案?你会找回你失去的名誉。