php MySQL“或”条件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8604380/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 05:03:55  来源:igfitidea点击:

MySQL "Or" Condition

phpmysqlselectconditional-statements

提问by Nick Chubb

Check out this MySQLQuery and then I'll show you what I really want it to do...

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

The problem with it is that I want it to always match the email. In this case (for example) if the date equals $Date_SixDaysAgothen it will be selected from the query even if $Emaildoesn't equal the email column.

它的问题是我希望它始终与电子邮件匹配。在这种情况下(例如),如果日期等于,$Date_SixDaysAgo那么即使$Email不等于电子邮件列,它也会从查询中选择。

So, in short, I want the email to always equal the email column, and if the query pulls a date that equals $Daye_TwoDaysAgoor $Date_ThreeDaysAgoetc.. but doesn't equal the email then don't pull it.

因此,简而言之,我希望电子邮件始终等于电子邮件列,如果查询提取的日期等于$Daye_TwoDaysAgo$Date_ThreeDaysAgo等等,但不等于电子邮件,则不要提取它。

I guess my query would look kind of like this, but I'm pretty sure it won't work..

我想我的查询看起来像这样,但我很确定它不会工作..

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

回答by Maxim Krizhanovsky

Use brackets to group the OR statements.

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

You can also use IN

您也可以使用 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')");

回答by Alex

Use brackets:

使用括号:

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

But you should alsos have a look at the INoperator. So you can say ′date IN ('$date1','$date2',...)`

但你也应该看看IN运营商。所以你可以说 'date IN ('$date1','$date2',...)`

But if you have always a set of consecutive days why don't you do the following for the date part

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

date <= $Date_Today AND date >= $Date_SevenDaysAgo

回答by VolkerK

Your question is about the operator precedencesin mysql and Alex has shown youhow to "override" the precedence with parentheses.

您的问题是关于mysql 中的运算符优先级Alex 向您展示了如何用括号“覆盖”优先级。

But on a side note, if your column dateis of the type Dateyou can use MySQL's date and time functionsto fetch the records of the last seven days, like e.g.

但附带说明一下,如果您的列date是这样的类型,Date您可以使用MySQL 的日期和时间函数来获取过去 7 天的记录,例如

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

(or maybe Curdate() instead of Now())

(或者可能是 Curdate() 而不是 Now())

回答by Ayman Safadi

Wrap your AND logic in parenthesis, like this:

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

回答by shoaib akhunzada

try this

尝试这个

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

my be like this

我是这样的

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