제목 | DB join and union 질문 | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | ezcom | 작성시각 | 2018/07/23 18:40:38 |
|
|||
MYSQL을 사용 하고 있습니다. 하나의 스키마에 테이블이 총 5개이며 join과 union이 동시에 이루어져야 합니다. 구 테이블과 신규 테이블이 모양이 틀려 기존 테이블을 VIEW로 신규 테이블과 맞추어 놓은 상태이고요 일단 셈플 쿼리 자체는 잘 실행 되는이 이것을 CI에서 사용 하려고 하는데 CI에 익숙치 않아서 질문 드립니다. 테이블 모양 =============================================================== Table A - Index int(11) primary key - ID varchar(20) not null - etc varchar(10) default null
TABLE B_OLD - CODE int(11) - value int(10) - ID varchar(20)
TABLE B - CODE int(11) - value int(10) - ID varchar(20)
TABLE C_OLD - CODE int(11) - value int(10) - ID varchar(20)
TABLE C - CODE int(11) - value int(10) - ID varchar(20) =============================================================== 셈플 쿼리 SELECT A.*, BB.Value, CC.Value FROM A left outer join (SELECT B.ID AS ID, B.Value AS Value FROM B UNION ALL SELECT B_OLD.ID AS ID, B_OLD.Value AS Value FROM B_OLD) AS BB ON BB.ID=A.ID left outer join (SELECT C.ID AS ID, C.Value AS Value FROM C UNION ALL SELECT C_OLD.ID AS ID, C_OLD.Value AS VALUE FROM C_OLD) AS CC ON CC.ID=A.ID WHERE A.ID='my_ID''';
==> 예상 CI model code $this->db->where('A.ID', $id); $this->db->select('A.*, BB.Value, CC.Value', false) $this->db->join('(SELECT B.ID AS ID, B.Value AS Value FROM B UNION ALL SELECT B_OLD.ID AS ID, B_OLD.Value AS Value) AS BB','BB.ID=A.ID','left outer'); $this->db->join('(SELECT C.ID AS ID, C.Value AS Value FROM C UNION ALL SELECT C_OLD.ID AS ID, C_OLD.Value AS Value) AS CC','CC.ID=A.ID','left outer'); $this->db->order_by('A.index', 'asc'); $qry = $this->db->get('A', $limit, $offset); $result['qry'] = $qry->result_array();
==> 질문 드리고자 하는 요지 2개의 테이블을 union all 한 테이블들을 join 하고자 합니다. 적절한 CI코드 인지 확인 부탁드립니다. A left outer join (B union all B_OLD) left outer join (C union All C_OLD)
|
|||
다음글 | 상세에 목록이 존재하는 경우, 컨트롤러 / 모델 구성 (3) | ||
이전글 | 컨트롤러 파일의 생성 기준 (6) | ||
한대승(불의회상)
/
2018/07/23 19:10:25 /
추천
0
쿼리가 복잡한 경우엔 쿼리빌더 보다 $this->db->query() 에 직접 SQL문을 실어 던지는것이 좋습니다.
|
kaido
/
2018/07/24 09:04:12 /
추천
0
굳이 사용하신다면 $this->db->join 부분이 잘못 되었습니다. 메뉴얼에서 한번 확인해 보세요 |
ezcom
/
2018/07/24 11:04:35 /
추천
0
Union 절을 view로 다시 생성해서 간략하게 만들어 보았습니다. 테스트 환경구성이 어려운 상황이라. CREATE VIEW BB AS SELECT * FROM B_OLD UNION ALL SELECT * FROM B
CREATE VIEW CC AS SELECT * FROM C_OLD UNION ALL SELECT * FROM C
$this->db->where('A.ID', $id); $this->db->select('A.*, BB.Value, CC.Value', false) $this->db->join('BB','BB.ID=A.ID','left outer'); $this->db->join('CC','CC.ID=A.ID','left outer'); $this->db->order_by('A.index', 'asc'); $qry = $this->db->get('A', $limit, $offset); $result['qry'] = $qry->result_array(); 메뉴얼에 $this->db->join 의 첫 파라메터가 table 이름이라고만 나와서 일단 뷰로 단순화 시켰습니다. |
변종원(웅파)
/
2018/07/24 18:12:15 /
추천
0
join에 서브쿼리 사용이 안됩니다. 복잡한 쿼리는 그냥 사용하시는걸 추천합니다. 한대승님 의견에 한 표 + |