我並不是超級棒的SQL。我正在過濾一個具有以下內容的concrete5集合,不知道如何讓它全部工作。如何正確使用括號來區分AND和OR語句?SQL如何正確使用括號來分隔AND和OR語句?
這並不做任何事情:
$this->filter(null, "(
(DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
OR
(DATE_SUB(expirationDate, INTERVAL 5 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
OR
(DATE_SUB(expirationDate, INTERVAL 1 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
)
AND
(DATE_ADD(warnedDate, INTERVAL 4 DAY) <= NOW())");
這一次主要是工程(繞之前的語句刪除括號),但似乎並沒有後和...。「DATE_ADD該條款過濾( warnedDate,INTERVAL 4 DAY)< = NOW())「:
$this->filter(null, "
(DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
OR
(DATE_SUB(expirationDate, INTERVAL 5 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
OR
(DATE_SUB(expirationDate, INTERVAL 1 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
AND
(DATE_ADD(warnedDate, INTERVAL 4 DAY) <= NOW())");
您的第一個陳述似乎是正確的。嘗試刪除'AND(DATE_ADD(warnedDate,INTERVAL 4 DAY)<= NOW())「);'以驗證'OR'邏輯是否按預期工作,然後將其添加回來。 DATE_SUB(expirationDate,INTERVAL 5 DAY)在DATE_SUB(NOW(),INTERVAL 3 DAY)和NOW()之間的邏輯「OR」來確保邏輯是正確的(somelogic或somelogic)和(someothericlogic)' – 2014-02-18 17:29:00
'或 或 (DATE_SUB(expirationDate,INTERVAL 1 DAY)DATE_SUB(NOW(),INTERVAL 3 DAY)和NOW())' 不做任何事情,因爲您的第一個條件(30天)包括5天和1天的間隔現在如此刪除它們 –
@SaUce OR邏輯似乎是工作沒有AND和語句處理它..我想知道爲什麼當AND ..在那裏它不起作用.. – CaitlinHavener