CI 묻고 답하기

제목 CI2 from절 subquery 관련 질문
카테고리 CI 2, 3
글쓴이 듀언 작성시각 2022/10/28 10:36:45
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 5219   RSS

안녕하세요, 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한 방법이라 사용하고싶지는 않은데,

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

 다음글 hooks에서 모델호출 시 Call to undefin... (1)
 이전글 admin에서 로그인시 hooks 순서 질문 (2)

댓글

한대승(불의회상) / 2022/10/28 10:57:56 / 추천 0

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

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

 

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