자바(Java)/JAVA 2EE

단답형 게시판 알고리즘

본클라쓰 2009. 10. 19. 20:13

단답형 게시판 알고리즘

 

 단답형 게시판을 구현하기 위해서는 게시물의 그룹번호, 그룹내에서 순서, 그룹내에서 레벨 이 세가지 값이 필요하다. 단답형 게시판을 구현하기 위해서는 새로운 글을 쓸 때와 답변글을 쓸 때 그룹번호, 그룹내에서의 순서, 레벨 이 세 가지의 데이터로 구분한다.

 

 새글을 쓸 경우에는 그룹번호을 현재 테이블에 있는 그룹번호중 제일 높은 번호를 부여하고 그룹내 순서와 레벨은 0으로 지정한다.

 

 하지만, 답변글을 쓸 때는 그룹번호는 그대로 유지하고 그룹내 순서와 레벨을 통해 단답글의 순서를 지정한다. 답변글이 달리때는 답변글이 달리는 글에서 순서와 레벨을 가지고 와서 부모글의 순서값보다 높은 값을 가진 글들에 +1시키고 자신의 글에도 +1시킨다. 그리고 레벨은 부모글의 레벨에서 +1시키면 된다. 

 

                groupSeq , sequence , level

          1번       1               0              0

[답글] 2번       1               1              1

  [답글] 3번     1               2              2

 

 여기까지가  답글이 증가할 경우 그룹번호, 순서, 레벨이 증가하는 방법이다. 이 때 1번글에 다시 답글이 달릴 경우 다음과 같은 값으로 변경된다. 

 

                groupSeq , sequence , level

          1번       1            0            0

[답글] 4번       1            1            1

[답글] 2번       1            1+1         1

  [답글] 3번     1            2+1         2

 

 즉, 그룹번호와 레벨은 그대로 유지하고 글의 순서는 변경해야 한다. 이런 처리후 게시물을 순서대로 불러올때는 다음과 같이 SQL문을 작성한다.

 

> SELECT * FROM table ORDER BY groupSeq DESC, sequence ASC LIMIT 시작, 끝

 

 

 

 

전체 수도 코드

답글일시 groupSeq, sequence, level 이 세개의 값을 가지고 넘어옴

 

만약 ( SELECT max(그룹번호)  FROM table; 값이 있다면 ) {

    그룹 번호 = max(게시물번호) + 1 

 }

아니라면 { 

    그룹 번호 = 1;   // 최초 작성 글에서만 수행

}   

 

 

만약 ( 그룹번호가 0이 아니라면 ) {  // 즉, 답글일 경우 수행 

    UPDATE table SET sequence=sequence+1 WHERE groupSeq=답글그룹번호

    AND sequence > 가져온sequence값;

    자신의 sequence, level값을 1씩 증가 

아니라면 {

    그룹번호는 위에서 계산한 번호

    sequence = 0

    level = 0 

 

처리 완료 후 게시물 디비에 저장