Hello,

kok nae-ga ha-myun an-dweneun MAGIC...🧚

웹 프로그래밍

답글 게시판 만들기 ( 데이터베이스 테이블 )

✿도담도담 2018. 11. 4. 15:16

로그인 및 회원가입을 완료해야하는데 취업을 하고 나서 시간이 없다...😅

갑자기 답글 게시판을 포스팅 하려는 이유도 만들어야 하기 때문에..

사실 예전에 학교에서 만든적이 있는데 역시나 다시 하려니 찾아보게 된다..(머쓱

.

.

쨌든 답글이 없는 게시판을 만들 때는 단지 게시판에 사용되는 정보만 담을 엔티티가 있으면 되지만,

답글이 있는 게시판을 만들기 위해서는 총 세개의 엔티티가 더 필요하다!

1
2
3
4
5
6
7
8
9
10
CREATE TABLE BOARD(
   BOARD_NUM int not null primary key auto_increment,
   BOARD_SUBJECT VARCHAR(50),
   BOARD_CONTENT text,
   BOARD_RE_REF int,
   BOARD_RE_LEV int,
   BOARD_RE_SEQ int,
   BOARD_READCOUNT int,
   BOARD_DATE date
);
cs


우리는 여기서 BOARD_RE_REF, BOARD_RE_LEV, BOARD_RE_SEQ 이 친구들을 중점적으로 살펴보려한다. 나머지 엔티티는 보다시피 게시판에 나타낼 게시판 번호, 제목, 내용, 조회수, 날짜 등이다.


그렇다면 저 세명의 엔티티가 누구일까?

BOARD_RE_REF : 해당글이 참조하고 있는 글번호, 부모 번호 ( 자기 자신일 경우 자신의 글 번호 )

BOARD_RE_LEV : 모 게시글에 소속된 게시글의 순서

BOARD_RE_SEQ : 답글에 답글일 수록 커지는 값 ( 부모:1, 부모에 대한 답글:2, 답글에 대한 답글:3 )


이해를 돕기 위해 아래에 참고 블로그를 걸어 놓겠다. 예제가 잘 정리되어 있으니 참고하자.

참고 : http://ssmlim.tistory.com/7

.

.

이어서 글 목록을 가져오기, 글 쓰기 부분의 쿼리를 정리하고 마무리 하겠다 :)

1
select * from board order by BOARD_RE_REF desc,BOARD_RE_SEQ asc limit ?,?
cs

해당 쿼리는 글 목록을 가져오는 부분이다.

게시글은 처음 최신순을 가져와서 보여주기 때문에 부모 번호를 ( BOARD_RE_REF ) 내림 차순 한뒤,

답글의 위치 ( 답글의 깊이 BOARD_RE_SEQ )를 오름차순하여 받아왔다.

이때 limit 부분은 페이징을 위해 사용해 주었다.


원글 또는 답글을 쓰는 경우에는 아래의 쿼리문을 실행 하였다.

1
2
insert into board (BOARD_SUBJECT, BOARD_CONTENT, BOARD_RE_REF, BOARD_RE_LEV, BOARD_RE_SEQ, BOARD_READCOUNT, BOARD_DATE) values(...)";Colored by Color Scripter
cs


단, 답글 또는 답글에 대한 답을 을 쓰는 경우 부모글의  BOARD_RE_REF, BOARD_RE_LEV, BOARD_RE_SEQ를 변수에 담아 준 뒤 

1
update board set BOARD_RE_SEQ=BOARD_RE_SEQ+1 where BOARD_RE_REF=? and BOARD_RE_SEQ>?";
cs

내가 쓰려는 답글보다 아래에 위치한 친구들의 BOARD_RE_SEQ번호를 1씩 증가 시켜준다.

그리고 나서 원글과 같이 INSERT 문을 실행 시 순번을 나타내는 BOARD_RE_LEV과 답글의 깊이인 BOARD_RE_SEQ에 각각 + 1을 해준뒤 실행 시켜준다.




현재 내가 만들어야 하는 게시판에서는 답글을 하나만 달면 되는 QnA게시판 이므로

아마 BOARD_RE_SEQ와 UPDATE문은 사용되지 않을 것 같지만 언젠간 사용할 수도 있으므로 정리해봤다. 끝!