본문 바로가기
MySql

MySQL 동적 Active Record 쿼리의 Codeigniter 괄호

by 베이스 공부 2020. 10. 4.
반응형

ActiveRecord를 사용하여 다음과 같은 쿼리를 생성하고 있습니다.

SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND 
       `tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%'

태그 의 수와 값을 알 수 없습니다. 배열은 동적으로 생성됩니다. 아래에 가능한 배열을 추가했습니다.

$tags = array (                 
        '0'     => 'green'.
        '1'     => 'blue',
        '2'     => 'red'
);  

태그 배열이 있으므로 다음 루프를 사용하여 맨 위에 게시 한 쿼리를 만듭니다.

$this->db->where('type', $type); //var type is retrieved from input value

foreach($tags as $tag):         
     $this->db->or_like('tags', $tag);
endforeach; 

문제 : 아래와 같이 LIKE 절 주위에 괄호를 추가해야합니다.

SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND 
      (`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%')

괄호 안의 내용이 정적이지만 foreach 루프가 나를 쫓아내는 경우이를 수행하는 방법을 알고 있습니다.

 

해결 방법

 

CI 위키에서 :

codeigniter ActiveRecord 기능 allows you to create SQL queries relatively simply and database-independant, however there isno specific support for including SQL 쿼리의 괄호.

예를 들어 where 문이 다음과 유사하게 나오기를 원할 때 :

WHERE (field1 = value || field2 = value) AND (field3 = value2 || field4 = value2) 

이 문제는 CI-> db-> where () 함수에 문자열을 입력하여 해결할 수 있습니다.이 경우 특별히 값을 이스케이프해야합니다.

다음 예를 참조하십시오.

$value=$this->db->escape($value);
$value2=$this->db->escape($value2);
$this->db->from('sometable');
$this->db->where("($field = $value || $field2 = $value)");
$this->db->where("($field3 = $value2 || $field4 = $value2)");
$this->db->get(); 

유사한 해결 방법을 LIKE 절에 사용할 수 있습니다.

$this->db->where("($field LIKE '%$value%' || $field2 LIKE '%$value%')");
$this->db->where("($field3 LIKE '%$value2%' || $field4 LIKE '%$value2%')"); 

 

참조 페이지 https://stackoverflow.com/questions/6552821

 

 

반응형

댓글