질문 Q #24839
CI2 from절 subquery 관련 질문
듀언 2022-10-28 10:36:45

안녕하세요, ci2를 사용하고있는 주니어 개발자입니다.

 

현재 수행해야하는 작업중에,

A 테이블과 B테이블을 join한 후, 이를 바탕으로 select를 하며 order by와 row_number()를 실행하고,

그 결과 테이블에서 다시 where을 사용해야하는 상황에 있습니다.

 

그래서 단순히 

 

$this->db->select (*, row_number() over (order by `column_a` desc) as 'index');

$this->db->from (`A`);

$this->db->join (B, A.idx = B.idx, INNER) ;

$this->db->get();
$subQuery = $this -> db -> last_query(); 
$this->db->flush_cache();

위와 같은 코드를 실행 이후, (get_compiled_select 는 ci2에 없습니다)

 

$this->db->select(*);

$this->db->from ('('.$subQuery.') as TEMP');

$this->db->where('a_column like `%cdt`')

와 같은 상황으로 active record를 작성하고,

last_query를 뽑아보면 from절에 기본적으로 괄호가 생성되어 syntax 에러가 발생합니다.

즉, ($subquery) as TEMP 라면 workbench에서 실행이 되는데 (($subquery) as TEMP) 가 삽입되어 실행이 안되는 것이죠.

mysqli_driver에서 설정을 바꾸어 해결하는 방법도 생각해보았으나 이는 너무 brute-force한 방법이라 사용하고싶지는 않은데,

혹시 다른 방법이 생각나는 고수님들 계시면 조언 부탁드리겠습니다.

답변 3
#1 한대승(불의회상) 2022-10-28 10:57:56

그냥 아래처럼 SQL문을 만들어서 실행 시키세요.

$sql = "select * from {{$subQuery}) AS temp where a_column like '%cdt'";
$result = $this->db->query($sql);

 

#2 듀언 2022-10-28 11:24:33
감사합니다. 아쉽게도 저희가 통쿼리 사용은 지양하고 있어서요..
#3 한대승(불의회상) 2022-10-28 15:32:36
아쉽네요.