我一直在考虑这个问题太久了,让自己感到困惑!我试图在CakePHP中提出一个MySQL查询,用于以下场景:
每条记录有2个日期;为了简单起见,我称之为F& I.这些决定了数据的质量,如下:
前两个很容易:
红色:
$conditions['AND'] = array('F' => null, 'I' => null);
绿色:
$conditions['AND'] = array(
'F >=' => Three months ago,
'I >=' => Three months ago
)
但我遇到了第三种选择的问题。我尝试了一些事情,我知道它的确如下:
$conditions['NOT'] = array(
'AND' => array(
'F >=' => Three months ago,
'I >=' => Three months ago
),
'AND' => array(
'F' => null,
'I' => null
)
)
但显然这不起作用,因为它有两个不同的值,用于' AND'。
答案 0 :(得分:3)
我认为你的布尔逻辑存在问题。如果你想要F&我代表过去三个月内的日期,然后你排除任何F> =三个月或I> =三个月的条目。
在布尔逻辑上使用De Morgan定律不那么令人困惑 - NOT (F >= three months OR I >= three months)
与F < three months AND I < three months
相同。因此,对于第三个规则,您的条件数组将如下所示:
array('conditions' => array('AND' => array('F <' => three months, 'I <' => three months)));
答案 1 :(得分:1)
我不确定,但试试这个:
$conditions['AND'] = array(
'NOT' => array(
'AND' => array(
'F >=' => Three months ago,
'I >=' => Three months ago
)
),
'NOT' => array(
'AND' => array(
'F' => null,
'I' => null
)
)
)
首先,你否定每个条件,并且需要外部'AND'
因为你希望两个条件都不成立。