반응형
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
반응형
'MySql' 카테고리의 다른 글
MySQL mySql은 키 값이 변경된 동일한 테이블에 행을 복사합니다 (기존을 덮어 쓰지 않음). (0) | 2020.10.04 |
---|---|
MySQL : 테이블에 여러 파일로드 (0) | 2020.10.04 |
MySQL PHP, MySQLi 및 Prepared Statement를 사용하여 삽입 된 행의 ID를 어떻게 반환합니까? (0) | 2020.10.04 |
MySQL PHP 및 JavaScript를 사용하여 콤보 상자를 mysql 테이블 값으로 동적으로 채우기 (0) | 2020.10.04 |
MySQL SQL : 이전 행에서 열 값이 변경된 행 선택 (0) | 2020.10.04 |
댓글