2014-04-28 2 views
0

오케이, 이것에 대해 너무 오랫동안 생각해 왔으며 혼란스러워했습니다! CakePHP에서 다음과 같은 시나리오를 위해 MySQL 쿼리를 작성하려고합니다 :MySQL 쿼리 - 2 세트의 조건

각 레코드에는 2 개의 날짜가 있습니다. F & 내가 모두 널 (null) 좋은 자료입니다 - - F & 내가 모두 null이 아닌

잘못된 데이터를 : 간단하게하기 위해 나는 다음과 같이 이러한 데이터의 품질을 결정 그들에게 F & I. 전화 할게 데이터 '사이에서'지난 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'에 대한 두 개의 서로 다른 값을 가지고 있기 때문에 분명히 그 일을 없을거야. 나는 그 해결책이 그렇게 어렵지 않다는 것을 안다, 그러나 나는이 단계에서 그것의 주위에 나의 머리를 다만 얻을 수 없다 !!

아무도 도와 줄 수 있습니까? 감사!

+0

그것은 것입니다 당신이 –

답변

3

부울 논리에 문제가 있다고 생각합니다. F & 내가 지난 3 개월 이내에 날짜를 표시하려면 F> = 3 개월 또는 I> = 3 개월 인 항목을 제외해야합니다.

부울 논리에 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)));

+0

감사! 나는 당신이 제안한 방식대로 그것을 다시 쓰고 결국 거기에 도착했다! – Sharon

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'이 필요하다.

+0

감사합니다 .. 질문 몇 가지 데이터를 배치하면 훨씬 명확 - 내가 그 생각했는데, 그것의 일부를 놓쳤다 결과, 어떤 이유로. 그러나 그것은 나에게 더 가까워졌다! – Sharon