개발 Q&A

제목 mysql 질문드립니다.
카테고리 DB
글쓴이 뫄뫄잉뿌 작성시각 2017/06/21 11:23:36
댓글 : 16 추천 : 0 스크랩 : 0 조회수 : 9772   RSS

게시판 아이디를 생성할때,

DB에서 auto_increment 1부터로 설정주고

게시판 글쓰기하면 DB 게시판 아이디(board_id)가 1, 2, 3...

이렇게 될텐데..

만약에 board_id 가 1,2,3,4,5... 이렇게되어있어서 5번게시판 삭제 후 새글 쓰면 6번이 들어가는데,

그게아니라 5번으로 새로 넣고 싶어요..

만약에 중간에 3이 없어지더라도 하나씩 땡겨서 그냥 1,2,3,4 이렇게 바꾸고 싶은데

auto_increment 적용 후에 삭제할때 update 쳐주는 방법뿐일까요..?

SET @COUNT= 0;

update board SET board.board_id = @COUNT:=@COUNT+1;

근데 위대로 하면 중간글을 삭제했을 때 제대로 안될거같은데.. 

좋은방법없을까요..?

 다음글 curl 호출결과가 화면에 표시되는 문제에 대해 질문 ... (4)
 이전글 iframe으로 출력한 페이지의 데이터를 가져오는 방법... (1)

댓글

빛그림 / 2017/06/21 11:35:11 / 추천 0
글번호가 문제이신거라면 가상번호를 사용하심이 어떨런지요...
뫄뫄잉뿌 / 2017/06/21 12:12:57 / 추천 0
@빛그림 링크에 board_id가 들어가는데 이게 글번호와 같길 원하셔서요..ㅜㅜ 방법이 board_id를 재정렬 해야되는 것 밖에 생각이 안나욤..
한대승(불의회상) / 2017/06/21 12:40:15 / 추천 0
매번 select max(board_id)+1 로 가져오는 방법이 있긴합니다만... 별로 추천하진 않습니다.
하늘치 / 2017/06/21 12:40:40 / 추천 0

글 번호가 사실상 정렬 순서 번호이니까..

굳이 해야 한다면, 뷰 페이지에서 정렬 순서로 글을 가져오는 건 어떨까요?

권하고 싶은 방법은 전혀 아닙니다만...

뫄뫄잉뿌 / 2017/06/21 12:42:18 / 추천 0
@한대승(불의회상)님 일단 max+1로 insert는 시키고 있는데.. 중간글을 삭제하면 꼬여서요..ㅜㅜ
뫄뫄잉뿌 / 2017/06/21 12:43:06 / 추천 0
@하늘치님 그런 방법도 있긴하네욤.. 흠.. 그냥 요청하신 분을 설득하는게 제일 빠른방법일 수도 있겠네요..ㅎ..
한대승(불의회상) / 2017/06/21 13:01:00 / 추천 0

@뫄뫄잉뿌 삭제한 후에 글번호들을 모두 업데이트 해 줘야합니다.

댓글이나 파일이 글번호와 연결되어 있다면 찾아서 모두 업데이트 해 줘야하구요.

일반적으로 글번호는 primary key로 설정하기 때문입니다.

제일 좋은 방법은 빛그림님이 추천하신 가상번호입니다.

kaido / 2017/06/21 13:04:31 / 추천 0

이거 이전에 제가 한번 만들어봤던 기억이 어렴풋이 납니다만... 

그때 기억이 맞다면 한가지 재미난 특성을 아셔야 합니다.

1 2 3 4 5 번글에서 3번글을 삭제하고 insert id 가 아닌 상태로 글을 넣으면 6번은 어디로 들어갈까요?

1 2 4 5 6 이라고 흔히 생각 하는데, 막상 테스트 해보면 이렇습니다.

1 2 6 4 5 빈 자리에 들어갑니다. 이유는 모르겠다만.. 여튼 그래요. [id 를 유니크 인덱스 오토 태우지 않을 경우...]

 

사실 이게 일반적인 방법은 아니긴 하지만 id 값이 아닌 seq 값을 따로 더 주는 방법이 있습니다.

보여주는건 id가 아닌 seq를 보여주는 것이죠.

seq를 도입 하는 게시물은 흔히 순서를 마음대로 조절 가능 한 경우 입니다.

대신 글이 하나 작성 되거나 삭제 될때마다 전체 seq를 조절해 줘야 합니다.

3번이 삭제 3번 이후 seq는 전부 -1 이 되는 것이죠.

신규 글은 넣을때 seq가 최대 레코드 +1 이 되는 거구요.

물론 id는 seq와 상관없이 사용 합니다. 어차피 id 값을 get 으로 사용해서 표현해도 뭔말 인지 모릅니다.

보이는 리스트의 번호가 중요할뿐이죠.

대신 값이 무결함을 유지하려면 트랜잭션 태워서 매번 꼼꼼이 작업이 들어가야 합니다.

퍼포먼스 생각하면 트리거를 태워두는게 좋기도 하구요.

그래도 번호가 안 맞는 경우가 튀어나올경우 강제로 번호를 재정렬 시켜주는 기능도 만들어 놓으셔야 합니다.

뫄뫄잉뿌 / 2017/06/21 13:07:45 / 추천 0

@한대승(불의회상)

가상번호 board_num_id 를 새로 두고,

이 번호를 링크에 둔 다음,

해당 게시판 이동 시 board_num_id에 해당하는 게시판의 정보를 불러와야 한다는 말씀이시지요?

뫄뫄잉뿌 / 2017/06/21 13:09:46 / 추천 0

@kaido님

생각보다 까다로운 작업이네요.. ㅠㅠ

가상번호를 두는게 제일 좋은 작업같은데..

글쓰고 지울때마다 재정렬해줘야하니 auto_increment보다 두번,세번 더 작업해줘야하네요..ㅜㅜ

뫄뫄잉뿌 / 2017/06/21 13:40:32 / 추천 0

---------------------------------------------------------------------------------------------------

별도로 wr_num이라고 DB에 글번호가 저장되는데.. 이걸 토대로 링크 변경해도되겠죠..? 이게 가상번호 역할인듯싶습니다..ㅜㅜ

변종원(웅파) / 2017/06/21 15:01:02 / 추천 0

100만건 게시판이라고 예전부터 phpschool 등에서 한참 회자되었던 내용입니다.

검색과 정렬, 번호 문제등을 토론(이라고 쓰고 난타라고 읽는다)을 했었죠. 검색해보시면 자료들 남아있습니다.

사용자한테 보여지는 번호와 내부 관리번호가 꼭 일치할 필요가 없고

내부 관리개념에 대한 것을 클라이언트가 요구한다면 클라이언트의 넓은 마음(이라고 쓰고 오X랍이라고 읽고)인거로... ㅎㅎㅎㅎ

뫄뫄잉뿌 / 2017/06/21 15:19:47 / 추천 0

@변종원(웅파)님

그쵸.. 역시 클라이언트와 개발자의 시선이 다른건 어쩔수없나봐요..ㅎㅎ

결국은 꼭 같아야할 필요성을 물어보고, '그럴필요는 없다'라고해서 현상유지했어요.

그누보드사용중인데.. 그누보드에서 만든 게시판 내부 관리 id라 이거 바꾸면 여러군데 수정해야할 뿐더러 데이터꼬일 것 같다고 말씀드렸어요..ㅜㅜ 결국엔 제 능력부족이죠..ㅠㅠ

한대승(불의회상) / 2017/06/21 15:44:20 / 추천 0

@뫄뫄잉뿌 능력은 아닌것 같고 표현이 조금 다른거겠죠. ^^

화이팅!!!

/ 2017/06/21 16:58:05 / 추천 0
다읽어 보진 않았지만 플래그를 사용하여 실제 글을 삭제 하지 마시고 0,1로 가져올 때 필터하시는 방법은 어떤가요?