개발 Q&A

제목 outer조인시, on절에 가변적인 조건 추가시 어떻게 작성하시나요?
카테고리 DB
글쓴이 피엘 작성시각 2017/05/22 19:23:41
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 11880   RSS

질문은 제목 그대로인데..

기준 테이블의 데이터를 기준으로 카운팅하는 쿼리인데..

기준 테이블이 A가 있고, A에 대한 1대다에 해당하는 B테이블을 Left outer join으로 할때,

B 테이블에 대한 조건이 가변적입니다.

CI에서 제공하는 join 함수 예제에서는 키값만 매핑하는 단순한 예제밖에 없어서 어떻게 처리해야할지 모르겠네요.

오라클 같은 경우에는 where절에 (+) 연산으로 on절에 주는 조건 효과를 줄 수 있는데..

mysql에서는 ansi쿼리로 짤 경우에는 on절에 해당 조건을 추가하는 방법밖에 없는거 같은데 

어떻게 해야하는지 감이 안옵니다. 

 

 다음글 ajax 사용시 url에 따른 오류 (1)
 이전글 금요일 세션관련 질문 했던 사람입니다.. (1)

댓글

kaido / 2017/05/23 09:05:50 / 추천 0
select  T1.* , T2.* from tableA as T1
left join tableB as T2   on T1.id = T2.id
where T2.name = 'ci';

이걸 액티브 레코드 하고 싶으시다는 것인가요?

 

$this->db->select("T1.* , T2.*", false);

$this->db->form("tableA as T1");

$this->db->join("tableB as T2","T1.id = T2.id","left");

$this->db->where("T2.name" , "ci");

 

 

피엘 / 2017/05/23 14:24:49 / 추천 0

아뇨, 

적어주신 예제로 예를 든다면..

select  T1.* , T2.*
from tableA as T1
left outer join tableB as T2  
on T1.id = T2.id
-- 조건에 따라 on절 조건 추가
and T2.name = 'ci';

위와같은 동적 쿼리를 액티브레코드로 하는 방법이 있는지 궁금합니다.

 

kaido / 2017/05/23 16:06:33 / 추천 0

액티브레코드로는 없는 걸로 알고 있습니다.

액티브레코드가 안되는 것은 일반 쿼리 방식으로 해결 하셔야 합니다.

사실 된다 안된다를 떠나서 일반 쿼리 방식이 훨씬 간결하고 간단 하다면, 일반 쿼리 방식으로 만듭니다.

일반 쿼리 방식이란 $this->db->query("select * from table");  을 의미합니다.

피엘 / 2017/05/23 16:09:14 / 추천 0

네 감사합니다.

저도 찾아보니깐 엑티브레코드 방식으로는 없는거 같은데,

프로그램을 하다보면 동적쿼리를 최대한 지양할려고 해도 어쩔 수 없이 쓰게 되는 부분이 있는데..

다른 분들 중에 동적쿼리를 쉽게 쓰시는 방법이 있나 궁금해서 문의드렸습니다.

이제다시 / 2017/05/24 16:14:22 / 추천 0

$this->db->join("tableB as T2", 'T1.id=T2.id AND T2.name = 'ci'" , "left", false);

ON 조건절에 추가로 조건을 주면 됩니다.