CI 묻고 답하기

제목 업데이트 쿼리를 작성하는도중 몇시간째 헤메고 있는것이 있어 질문드립니다 ㅠ
글쓴이 마카오최 작성시각 2015/11/27 23:55:01
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 12502   RSS
안녕하세요.
어떤 필드값 = 어떤필드값 +1  이게 제 질문의 핵심이라고 보시면될것 같습니다...

UPDATE BOARD_TEST SET list_no = list_no+1 WHERE list_no >= 1 AND o_idx = 27

일반적으로 이렇게 사용하던 쿼리를 
CI 쿼리빌더에 맞춰 아래와 같이 작성을 하였습니다.
** 테스트하려고 헬퍼로 따로 빼서 넘버와 테이블네임들을 고정시켰습니다. **

function test_update() {
    $CI=& get_instance();

    $o_idx = 27;
    $list_no = 1;
    $up = array( 
        'list_no' => list_no+1
        //'list_no' => 'list_no+1'  // 이게 맞나 싶어 이렇게도 해보았습니다..
    );


    $CI->db->where( array( 'list_no >=', $list_no, 'o_idx'=>$o_idx ) );
    $result = $CI->db->update( 'BOARD_TEST', $up );


    return $result;
}


ci 프로파일러로 결과를 체크해보니..쿼리는 true가 떨어지긴 하는데.. 값들은 모두 1이 들어가고
결과가 아래와같이 나옵니다..
0.0002   UPDATE `BOARD_TESTSET `list_no` = 1
WHERE 0 
'list_no >='
AND 1
AND `o_idx` = 27 

괴상하게 작성되네요... 메뉴얼을 계속봐도봐도 어느부분을고쳐야할지 모르겠습니다...ㅠㅜ


 
 다음글 CI3 에 Ratchat 를 적용하고 싶은데, 또는 W... (4)
 이전글 파일업로드 시 아이폰에서 응답이 안됩니다... (2)

댓글

taegon / 2015/11/28 15:21:13 / 추천 0
위에 보여주신 쿼리를 엑티브레코드로 작성하면 아래와 같이 될 것 같습니다.
set에 FALSE 넣어주는 것은 메뉴얼에서 찾아보시면 왜 그렇게 하는지 아실 수 있으실 겁니다.
$CI->db->set('list_no', 'list_no + 1', FALSE);
$CI->db->where(array('list_no >=' => $list_no, 'o_idx' => $o_idx);
$CI->db->update('BOARD_TEST');
마카오최 / 2015/11/30 22:55:32 / 추천 0
taegon 님 답변 감사합니다.^^
알려주신대로 적용하니 잘 됩니다~.

set을 한번더 명시해주고 FALSE를 선언하는것 ! 
간단하지만 코드도 깔끔하고 직관적이네요..
뒷부분에 FALSE를 주는것을 메뉴얼에서 본적은 있었는데 별로 중요한것 같지 않아 흘려봤는데 그게 또 결정적이었네요 ㅠ..

앞으로 업데이트쿼리는 저렇게 3단계의 형태로 하는것을 기본으로 생각하고 해야겠습니다..