CI 묻고 답하기

제목 update 또는 insert 관련
카테고리 CI 2, 3
글쓴이 주말생각 작성시각 2020/12/14 11:51:59
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 9414   RSS

기존 데이터가 존재하고 존재한 데이터의 날짜와 추가될 데이터의 날짜가 같으면 update가 되고 없으면 테이블에 insert가 되게 하려고 합니다. MySQL을 사용 중인데, INSERT INTO ON DUPLICATE KEY라는 것이 있는데, 조건에 유니크 키를 사용할 수 없는 상황입니다.(한 번에 다수의 행의 데이터를 변경해서 입니다.)

매뉴얼을 봤는데, CI 3.0에는 지금 상황에 도움이 될 만한 기능을 못 찾은 것 같습니다.

뭔가 액티브 레코드의 $this->db->update_batch()와 $this->db->insert_batch()를 활용해서 날짜에 따라 데이터를 업데이트할 것인지 인설트할 것인지 구분하는 방법이 있을까요?

 다음글 전문가님들 codeigniter 이메일 발송 하는 컨트... (3)
 이전글 보안서버(https)문의 (4)

댓글

PureAni / 2020/12/14 12:01:10 / 추천 0
유니크 사용이 힘들다면, 쿼리를 나눠서 보내시면 될듯합니다.
한대승(불의회상) / 2020/12/14 15:50:47 / 추천 0

update_batch()도 한 문장으로 이뤄진 쿼리가 아닙니다.

PureAni님 조언에 한 표!

주말생각 / 2020/12/14 17:18:55 / 추천 0

PureAni

쿼리를 나눠서 보낸다는 게 구체적으로 어떤 말씀이신가요?

PureAni / 2020/12/14 17:40:34 / 추천 0

@주말생각 // select -> insert or update 로 나누시면 되실거 같습니다.

row 하나당 select 로 있는지 확인해서, insert 혹은 update 하시면 될듯합니다.

주말생각 / 2020/12/14 17:50:11 / 추천 0

@PureAni

select -> if문-> 인서트용 배열, 업데이트용 배열에 각각 값을 저장 -> 3개의 조건 때문에 일반적인 액티브 레코드 $this->db->update를 for문을 통해서 실행하고 인서트는 조건이 필요없어서 insertDbData_batch로 실행합니다. 잘 되긴하는데 for문을 사용하니 좀 속도 저하가 걱정되는데 좋은 방법이 없을까요?

PureAni / 2020/12/14 18:01:00 / 추천 0

@주말생각 // 없을거라 생각됩니다.

insert 만 batch 를 사용하고, update 를 사용 안하신다면, update 도 batch 를 사용해보세요.

액티브 레코드의 동작 때문에 느리다 싶으시면, 그냥 쿼리를 직접 만드셔서 날리셔도 될거라 생각됩니다.

주말생각 / 2020/12/14 18:22:32 / 추천 0

@PureAni

update_batch는 조건을 하나만 사용 가능하지 않나요? 그냥 쿼리문을 날려도 for문을 사용하는 것은 저의 생각으로 피할 수 없어보입니다.

답변 감사합니다.