SQL如何正确使用括号分隔AND或语句?

SQL如何正确使用括号分隔AND或语句?,sql,concrete5,Sql,Concrete5,我并不擅长SQL。我正在过滤一个包含以下内容的concrete5集合,但不确定如何让它全部正常工作。如何正确使用括号分隔AND或语句 这没有任何作用: $this->filter(null, "( (DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW()) OR (DA

我并不擅长SQL。我正在过滤一个包含以下内容的concrete5集合,但不确定如何让它全部正常工作。如何正确使用括号分隔AND或语句

这没有任何作用:

$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())");
$this->filter(空)(
(日期(现在(),间隔3天)和现在()之间的日期(过期日期,间隔30天)
或
(日期(现在(),间隔3天)和现在()之间的日期(过期日期,间隔5天)
或
(日期(现在(),间隔3天)和现在()之间的日期(过期日期,间隔1天)
)
和

(DATE_ADD(warnedDate,INTERVAL 4 DAY)如评论中所述,5天和1天的两个条款是多余的,因为到今天的30天间隔已经包括到今天的5,1天,所以将其删除。 试试这样的

(DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
AND
(DATE_ADD(warnedDate, INTERVAL 4 DAY) <= NOW())
(日期(现在(),间隔3天)和现在()之间的日期(过期日期,间隔30天)
和

(DATE_ADD(warnedDate,INTERVAL 4 DAY)您的第一句话似乎是正确的。请尝试删除
和(DATE_ADD(warnedDate,INTERVAL 4 DAY)
或(DATE_SUB(expirationDate,INTERVAL 5 DAY)介于DATE_SUB(NOW(),INTERVAL 3 DAY)和NOW()之间或(DATE_SUB(expirationDate,INTERVAL 1 DAY)在DATE_SUB(现在(),间隔3天)和NOW()之间
不要做任何事情,因为您的第一个条件(30天)包括到现在的5天和1天的间隔,因此删除them@SaUceOR逻辑似乎在没有AND AND语句的情况下工作..我想知道为什么AND..在那里它不工作..@CaitlinAvener可能没有满足
下条件的记录检查数据。是的,我想我需要添加的是NULL或condition..不管是谁,现在一切都在运行!谢谢大家!这也不起作用:(该程序正在筛选成员资格在到期前30天、5天和1天到期的用户,并通知他们。它插入了一个时间戳(WarneDate)当用户收到警告时。我将其中一个用户的过期日期设置为从现在起30天,但它没有通知。此外,如果我想在30天、5天和1天之前通知用户,我不需要您删除的那些语句吗?这对我来说似乎可以处理测试数据。您不需要这些语句,或者因为任何在30天内的过期日期直到l今天已在5天(或1天)到今天的范围内
(DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW())
AND
(DATE_ADD(warnedDate, INTERVAL 4 DAY) <= NOW())