2013-06-29 1 views
1

Cakephp의 manual 제안처럼 여러 값과 AND 조건을 다른 열과 일치시키기 위해 "OR"조건을 넣고 싶은 열이 있습니다.find 함수와 함께 "OR"와 "AND"배열을 가진 Cakephp 문제

SQL :

SELECT * FROM site_logs 
WHERE action LIKE "Facebook%" OR action LIKE "Twitter%" AND 
created >= "2013-06-29" 
GROUP BY "ip address" 

CakePHP의 : SQL 생성

$conditions = array(
     'OR' => array(
      'SiteLogs.action like' => 'Facebook%' 
      'SiteLogs.action like' => 'Twitter%' 
     ), 
     'SiteLogs.created >=' => '2013-06-29' 
    ); 
$this->SiteLogs->find('all', 
    'conditions' => $conditions, 
    'group'  => 'ip address' 
) 

는 "트위터"데이터 배열이 서로 덮어 쓰게됩니다 같은 키를 가진 모든 요소를 ​​가지고 있기 때문에 "OR"에 대한 기록이 .

GENERATED SQL;

SELECT `site_logs`.* FROM `site_logs` 
WHERE `site_logs`.`action` LIKE "Twitter%" AND 
    site_logs`.`created` >= "2013-06-29" 
GROUP BY `site_logs`.`ip address` 

"OR"배열의 모든 값을 가져 오려면 어떻게해야합니까? 내가 놓친 게 있니?

+0

정확하게 대답은 아니지만 원하는 SQL은 약간 모호합니다. AND & OR 조건이 여러 개인 경우이를 그룹으로 묶어서 MySQL이 실행할 방법을 명확하게 지정해야합니다. 귀하의 경우에, 나는 당신이'(행동과 비슷하거나 행동이 b와 같고)> dt를 창조하고 싶다고 생각한다. 이것은 행동과 비슷하다. (행동과 비슷하고, 창조 된> dt) ' –

+0

@ StevenMoseley : 나는 cakephp의 매뉴얼에 혼란스러워했다. 도움 주셔서 감사합니다. – Nehal

답변

1

당신이 찾고있는 것은 이것입니다. 비슷한 OR 절을 각각의 배열에 포함시켜 키가 겹치지 않도록하십시오.

$conditions = array(
    'OR' => array(
     array('SiteLogs.action like' => 'Facebook%'), 
     array('SiteLogs.action like' => 'Twitter%') 
    ), 
    'SiteLogs.created >=' => '2013-06-29' 
); 
$this->SiteLogs->find('all', 
    'conditions' => $conditions, 
    'group'  => 'ip address' 
); 

이렇게하면 SQL이 생성됩니다. 각각 LIKE 조건 주위에 괄호가있는 불필요한 세트가 있지만 이것은 Cake에서 불가피한 것이며 쿼리 실행에 전혀 영향을 미치지 않습니다.

SELECT * 
FROM site_logs 
WHERE 
    ((action LIKE "Facebook%") OR (action LIKE "Twitter%")) 
    AND created >= "2013-06-29" 
GROUP BY "ip address" 
관련 문제