CI 묻고 답하기

제목 join table update 문의
카테고리 CI 2, 3
글쓴이 다다닷 작성시각 2020/05/14 11:03:20
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 11535   RSS

안녕하세요.

테이블 2개를 업데이트를 해야하는 상황이라 고민 하던 중 CI 문법으로 해결이

안되어 문의 남겨 봅니다 ^^;

 

$user_data['NAME'] = $data['user_name'];
$user_data['ADDRESS'] = $data['user_address'];

$this->db->set($user_data);
$this->db->where('UID',$this->session->UID);
$this->db->join('table2 as T2','T2.UID = T1.UID', 'LEFT');
$this->db->update('table as T1');

 

위와 같이 사용 했는데 아래와 같이 테이블 정보 하나만 표기 되네요.

UPDATE `table` AS `T1` SET `NAME` = '입력값', `ADDRESS` = '입력값' WHERE `UID` = '세션값'

 

구글링 후 아래와 같이도 사용 해보았습니다.

 

$this->db->set($user_data);
$this->db->where('UID',$this->session->UID);
$this->db->update('table as T1 LEFT JOIN table2 as T2 ON T2.UID=T1.UID');

 

로그 확인 결과

UPDATE `table as T1 LEFT JOIN table2` as `T2 ON T1`.`UID = T1`.`UID` SET `NAME` = '입력값', `ADDRESS` = '입력값' WHERE `UID`='세션값'

 

위와 같이 테이블을 감싸는 ` 부분이 제대로 감싸지질 않았습니다.

 

혹시나해서 

 

$this->db->set($user_data);
$this->db->where('UID',$this->session->UID);
$this->db->update('`table` as `T1` LEFT JOIN `table2` as `T2` ON `T2`.UID=`T1`.UID');

위와 같이도 해보았지만..

 

UPDATE `table`` as ``T1`` LEFT JOIN `table2`` as ``T2` ON `T1``.``UID` = `T1``.``UID`` SET `NAME` = '입력값', `ADDRESS` = '입력값' WHERE `UID`='세션값'

 

위와 같은 형태로 표기 되었습니다.

 

$sql = 'update table as t1 left join table2 as t2 on t2.uid=t1.uid set t1.name=?, t1.address=?';

$query = $this->db->query($sql, array('값1','값2'));

 

sql자체를 $this->db->query($sql); 를 사용 하는 방법도 있는건 알지만 ..

그저 조금 더 심플한 문법으로 해결을 할 수 있으면 더욱 편리 할 듯하여 문의 드려봅니다..^^;;

 

긴글 읽어 주셔서 감사합니다.

 

 

 

 

 

 

 다음글 AWS SES 메일 발송 개선 및 email queue... (3)
 이전글 페이지네이션 next_link 클릭시 다음 블럭으로 ... (3)

댓글

한대승(불의회상) / 2020/05/14 11:42:58 / 추천 1

join 업데이트는 쿼리 빌더가 아닌 sql문으로 직접 작성하셔야 합니다.

쿼리 빌더 사용시 사이드 이펙트가 발생합니다.

다다닷 / 2020/05/14 13:53:26 / 추천 0

@한대승(불의회상)

네 ^^; 아무래도 그렇게 해야만 될 것 같아서

결국 그냥 SQL 직접 작성하였습니다. 

답변 감사합니다!!