[英]SQL Query with 2 OR statments and 1 AND statement
我試圖像這樣運行SQL查詢:
$sql = mysql_query("select * from users where new_mail = 0 OR new_events = 0 and emailed = 1") or die(mysql_error());
while($r=mysql_fetch_array($sql))
{
mysql_query("update users set emailed = 0 where username='{$r['username']}'") or die(mysql_error());
}
但它似乎忽略了OR語句,只跟在和語句之后。 所以它繼續進行,並設置通過電子郵件發送到0,即使他們仍然有new_mail或new_event。 有什么線索的原因?
謝謝你的幫助!
在MySQL中, AND
運算符優先於OR
運算符。
要獲得所需的邏輯,請嘗試按照您希望的方式對參數進行分組:
$sql = mysql_query("select * from users where (new_mail = 0 OR new_events = 0) and emailed = 1") or die(mysql_error());
$sql = mysql_query("select * from users where (new_mail = 0 OR new_events = 0) and emailed = 1") or die(mysql_error());
while($r=mysql_fetch_array($sql))
{
mysql_query("update users set emailed = 0 where username='{$r['username']}'") or die(mysql_error());
}
您可能需要在where子句中添加括號
在OR子句周圍加上括號,將其從AND子句中分割出來。
根據MYSQL操作順序,除非分組,否則在OR
語句之前評估WHERE
子句中的AND
語句。 我假設您要做的是,如果new_mail或new_events為0並且emaililed設置為0,則查詢返回true。
如果是這樣,您需要將OR語句分組,如下所示:
"SELECT * FROM users WHERE (new_mail = 0 OR new_events = 0) AND emailed = 1"
如果您沒有在該循環中執行任何其他操作,您也可以將此簡化為一個查詢,方法是將WHERE
子句直接應用於UPDATE
查詢。
$sql = "UPDATE users SET emailed = 0 WHERE (new_mail = 0 OR new_events = 0) AND emailed = 1"
mysql_query($sql) or die(mysql_error())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.