簡體   English   中英

帶有2個OR語句和1個AND語句的SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM