MySQL查询 - 2组条件

时间:2014-04-28 17:43:06

标签: mysql cakephp logical-operators

我一直在考虑这个问题太久了,让自己感到困惑!我试图在CakePHP中提出一个MySQL查询,用于以下场景:

每条记录有2个日期;为了简单起见,我称之为F& I.这些决定了数据的质量,如下:

  • 不良数据 - F&我都是空的
  • 良好的数据 - F&我都是非空的,代表过去3个月内的日期 '介于'之间数据 - 其他一切

前两个很容易:

红色:

$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'。

2 个答案:

答案 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'因为你希望两个条件都不成立。