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
MySQL "Or" Condition
提问by Nick Chubb
Check out this MySQL
Query 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_SixDaysAgo
then it will be selected from the query even if $Email
doesn'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_TwoDaysAgo
or $Date_ThreeDaysAgo
etc.. 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 IN
operator. 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 date
is of the type Date
you 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'.........