개발 Q&A

제목 좋은 아이디어 없나요? sql update
글쓴이 이지포토 작성시각 2014/04/24 09:08:51
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 12989   RSS
TableA 는 list_no 라는 필드가 있고 
sn  list_no title ...
1     1     ABCDD ..
2     2     ABCDE ..
3     3     ABCDF ..
4     4     ABCDG ..
5     5     ABCDH ..

이런식으로 됩니다. sn 는 자동증가되는 프라이머리키고 list_no 는 중복될수 없는 시리즈 번호입니다.
그런데 sn 2번을 삭제되면
1     1     ABCDD ..
3     2     ABCDF ..  
4     3     ABCDG ..
5     4     ABCDH .. 이런식으로 되어야 하고 

sn 2,3번 동시에 삭제되면
1     1     ABCDD ..
4     2     ABCDG ..
5     3     ABCDH .. 이런식으로 되어야 하고 

sn 2,4번 동시에 삭제되면
1     1     ABCDD ..
3     2     ABCDF ..
5     3     ABCDH .. ..

sn 2,3,4 삭제되면
1     1     ABCDD ..
5     2    ABCDH ..

sn 2,5 삭제되면 
1     1     ABCDD ..
3     2     ABCDF ..
4     3     ABCDG ..

만약 1 만 삭제되면 
2     1     ABCDE ..
3     2     ABCDF ..
4     3     ABCDG ..
5     4     ABCDH ..

이런식으로 재 정렬된 update 가 list_no 값에 부여되어야 합니다.

노가대식으로 루프 돌려서  할수도 있지만 최소의 query 로 가급적 적은 sql 문으로 해결할수있는 방법이 있을까요?



 
 다음글 중복로그인 방지 (5)
 이전글 HTML 태그 문의 입니다. (1)

댓글

한대승(불의회상) / 2014/04/24 09:46:16 / 추천 0
노가대를 하긴 해야 하는데 DB에게 시키고 싶으시다면..
 
$this->db->query("set @no := 0");
$this->db->query("update TableA set list_no = (@no:=@no+1)");
변종원(웅파) / 2014/04/24 10:46:27 / 추천 0
게시판 로직중에 업데이트형에 해당하는건데 추천하지 않는 방식입니다.

몇건 안되면 상관없지만 데이터가 많아지면 부하가 상당하겠죠.

시리즈 번호가 join 등 다른 곳에 쓰이지 않나봅니다. 단순히 표현을 위해 그렇게 하는거면 다른 방법을 찾아보시는게 좋습니다.
이지포토 / 2014/04/29 13:20:51 / 추천 0
//list_no 재 정렬값 부여
 function list_no_sort($cine_no)
 {  
  $this->db->select('sn ');
  $this->db->from($this->table_name2.' as o');
  $this->db->where("cine_no", $cine_no);
  $this->db->order_by('o.sn  ASC');
  $query = $this->db->get();
  $result = $query->result_array();

  for($i=0;$idb->set('list_no', $re_list_no);
   $this->db->where("cine_no", $cine_no);
   $this->db->where("sn", $result[$i]['sn']);
   $this->db->update($this->table_name2);
  }
  

 }
변종원(웅파) / 2014/04/29 15:04:26 / 추천 0
이지포토/ 서버 부하를 유발하는 방식입니다. 행이 많아질수록 서버가 멈출 수도 있는 로직이죠.
ando / 2014/04/30 14:05:36 / 추천 0
굳이 삭제할때마다 업데이트 할 이유가 있을까요??
놔둬도 상관없을꺼같은데...