안녕하세요, 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한 방법이라 사용하고싶지는 않은데,
혹시 다른 방법이 생각나는 고수님들 계시면 조언 부탁드리겠습니다.
그냥 아래처럼 SQL문을 만들어서 실행 시키세요.
$sql = "select * from {{$subQuery}) AS temp where a_column like '%cdt'"; $result = $this->db->query($sql);