본문 바로가기

JSP & WEB & Ajax

계층형 게시판의 테이블 구조. [펌]

기본적으로 답글형 계시판이라 함은 여러가지 의미로는 쓰이지만 기본적인 원리는 다 똑같습니다.

 

예시

100. 안녕하세요.                     ---1번

    ->네 방갑습니다.                ---2번

        -> 저도 방가워요            ---3번

101. 질문사항                         ---4번

 

이러한 형태의 모양이 나오게 된다는 글입니다. 만약 DB에 위와 같이 순서대로 작성되어 있는 상태라면은 아무런 상관없이 순서대로 값을 읽어오면 되는 것이지만 생각 해야 될 부분이 이렇게 작성된글이 DB에도 과연

위와 같은 형태로 저장이 되어 있느냐 하는문제 입니다.

 

그럼 위엣 글에서 제가 3번글에다가 댓글을 단다고 생각을 해봅시다.

그러면 그글은 DB에 101번글 다음에 저장이 될터이고 순서대로 읽어오면 원하는 모양이 나오지 않습니다.

100. 안녕하세요.                     ---1번

    ->네 방갑습니다.                ---2번

        -> 저도 방가워요            ---3번

101. 질문사항                         ---4번

    -> 하이요

 

이러한 모양이 나오게 되는 것이지요.~~

 

그럼 3번에 댓글을 달았을때 원하는 모양을 나오게 하는 방법을 알아 보겠습니다.

이를 위해 DB에 3가지 Column이 필요하게 됩니다.

글에 대한 그룹을 지어줄수 있는 변수와, 어느글에대한 답변인지에 대한 변수와, 그 그룹들 사이에 출력될 순서를 저장할수 있는 것이 필요하다는 것입니다.

기존에 있던 글순서를 저장하는 변수 - num

그룹화를 지어주기 위한변수 - group

어느글에대한 답글인지에 대한 변수 - group_Num

그룹에 대한 순서를 지어 줄수 있는 변수 - group_Count

3개를 따로 만들어 주어야 합니다.

 

그럼 하나씩 입력을 해가면서 이해를 해보도록 하겠습니다.

먼저 하나의 글을 입력합니다.

num

group

group_Num

group_Count

1

1

0

0


첫글을 입력을 하면 이러한 모양이 될것입니다.

거기에 또다시 하나의 글을 입력을 합니다.

num

group

group_Num

group_Count

1

1

0

0

2

2

0

0

 

또다른 글을 입력하면 글수는 증가할것이며, 다른 그룹이므로 위와같은 형태를 가지게 됩니다.

 

여기에 이제 1번글에 대한 댓글을 달아 보겠습니다.

num

group

group_Num

group_Count

1

1

0

0

2

2

0

0

3

1

1

1


먼저 글이 저장될때, 3번글은 1번에 대한 댓글이므로 group, group_Num, group_Count에 대한 변수값을 모두 전달받아서 저장을 합니다.

저장한 후에 그룹번호는 넘겨받은 값을 저장을 하고 자신의 group_Num과 group_Count의 값을 1씩 증가 시켜줍니다.

요기에 다시 1번글에 대한 답글을 달아 보겠습니다.

num

group

group_Num

group_Count

1

1

0

0

2

2

0

0

3

1

1

1

4

1

1

2


위와 같은 형태가 되며 넘겨받은 group_Num과 group_Count의 값을 1씩 증가시킨후에 만약 자신의 group_Count의 값과 같거나 큰값이 있다라면 그 값도 역시 1을 증가 시켜 줍니다.

그럼 여기에서 이제 3번글에 대한 답글을 달아 보겠습니다.

답글은 기본적으로 먼저

num

group

group_Num

group_Count

5

1

1

1


기존 글에대한 값들이 저장이 되며, 먼저 자신의 group_Num과 group_Count의 값을1증가 시키게 됩니다.

num

group

group_Num

group_Count

1

1

2

2


위와 같이 가지게 됩니다.

그런후에 자신의 group_Count의 값과 같거나 큰값들을 1씩 증가 시키게 됩니다.

num

group

group_Num

group_Count

1

1

0

0

2

2

0

0

3

1

1

1

4

1

1

3

5

1

 2 


와 같은 모양이 되게 됩니다.

위와 같은 값을 가진 DB에서 값을 가지고 올때는 먼저 그룹순으로 내림차순으로 정렬 하고 group_Count값을 오름 차순으로 정렬하여 가지고 와서 뿌려주게 됩니다.

그리고 한칸씩 값이 들어 가게 하고 싶을때는 글앞에 이미지를 붙이거나할때 공백의 크기를

일정값 * group_Num으로 설정을 해서 이미지를 넣거나 공백을 주면 됩니다.

결과적으로.

num

group

group_Num

group_Count

2

2

0

0

1

1

0

0

3

1

1

1

5

1

2

2

4

1

3


결과를 출력하게 되는 것입니다.


[원문] http://blog.naver.com/kil0207/140050495431