0
 19   2   1
  View Articles

Name  
   손병목  (2003-10-23 23:36:23, Hit : 20470, Vote : 1565)
Homepage  
   http://www.itmembers.net
Subject  
   [중요] 답변형 게시판 구현 원리 (2/2) TYPE 2
오늘 내용은 결코 쉽지가 않습니다.

처음부터 차례차례 정말 주의 깊게 보지 않으면 잘 이해가 안 되실 겁니다.
차근차근 보세요. 앞의 내용이 이해안되면 뒤로 갈수록 더 이해가 안됩니다.

지난 번에 설명드린 답변형 게시판 TYPE1에서는 기존 게시판 테이블을 기준으로 세 개의 필드(list_number, depth, parent)가 더 필요했습니다.
게다가 list_number 필드는 실제 글이 작성되거나 삭제될 때마다 기존의 list_number를 모두 바꿔줘야 합니다. (이해가 안 되시면 TYPE1 강좌를 다시 보시기 바랍니다.)

오늘 설명드리는 TYPE2는 두 개의 필드만 더 있으면 됩니다.
그리고 정렬된 목록을 보여주기 위한 글 번호인 list_number가 필요 없습니다.

원 글의 번호를 저장하는 replyno 필드와 답변 글의 깊이와 순서를 동시에 나타내기 위한 replyst 필드가 필요합니다. 물론 number 필드에는 자동으로 고유한 번호가 매겨지게 되어 있구요.

답변 글을 등록하고 목록을 정렬하는 순서는 다음과 같습니다.
이해가 안 되시면 그냥 넘어가도 됩니다.
단, 이해는 안 되어도 반드시 기억은 하고 있어야 합니다.
그래야 아래 규칙에 맞게 코딩을 할테니까요.



1. 원 글을 쓸 경우…. 즉 답변 글이 아닐 경우
    ① number는 자동 증가합니다. (이건 당연한 거구요)
    ② replyno에는 number와 같은 값이 저장됩니다.
    ③ replyst에는 ‘AAAAA’가 저장됩니다.

2. 답변 글을 쓸 경우
    ① number는 자동 증가합니다.
    ② 원 글의 replyst의 값을 구합니다.
    ③ 원 글의 깊이를 구합니다. 여기서 깊이라는 것은 처음 나오는 ‘A’의 위치입니다. 위치는 0부터 시작합니다. 따라서 ‘AAAAA’의 깊이는 0, ‘BBAAA’의 깊이는 2가 됩니다.(처음 나오는 A의 위치가 세 번째이지만 0부터 시작하므로 2가 됩니다.)
    ④ replyno(진짜 원 글의 번호)를 구합니다.
    ※ [주의!!!] 만약 답변 글(ⓐ)의 답변 글(ⓑ)일 경우에는 ⓐ의 number 값이 아닌 ⓐ의 replyno 값(즉, ⓐ의 원래 글)이 됩니다.
    ⑤ replyno가 같고 ‘깊이+1’번째 문자를 제외한 나머지 문자가 일치하는 글 중에서 가장 큰 reply값을 가진 글의 number를 구합니다.
    ⑥ ⑤에서 구한 number의 replyst 값에서, 깊이+1번째 문자를 구합니다.
    ⑦ ⑥에서 구한 위치의 다음 문자를 구합니다.
    ⑧ replyst 값에 깊이+1번째 문자를 ⑦에서 구한 문자로 바꿉니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

처음 봐서는 도저히 이해가 안 될 겁니다.
일단 위와 같은 규칙을 적용한다고 하고, 아래 내용을 봐 주세요.



  1. 첫 번째 글을 등록할 경우



    ① number는 자동 증가하므로 1이 됩니다.
    ② 답변 글이 아니므로 replyno의 값은 number와 같은 1이 됩니다.
    ③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.

  2. 두 번째 글을 등록할 경우



    ① number는 자동 증가하므로 2가 됩니다.
    ② 답변 글이 아니므로 replyno의 값은 number와 같은 2가 됩니다.
    ③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.

  3. 두 번째 글의 답변 글을 등록할 경우



    ① number는 자동 증가하므로 3이 됩니다.
    ② 원 글(number=2)의 replyst의 값은 ‘AAAAA’입니다.
    ③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다. (0부터 시작합니다.)
    ④ replyno(원 글의 번호)는 2가 됩니다.
    ⑤ replyno=2이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=2입니다.
    ⑥ number=2의 replyst 값이 ‘AAAAA’인데, 깊이+1(=1)번째 문자가 ‘A’입니다.
    ⑦ ‘A’ 다음의 문자는 ‘B’입니다.
    ⑧ replyst 값은 ‘BAAAA’입니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

  4. 세 번째 글을 등록할 경우



    ① number는 자동 증가하므로 4가 됩니다.
    ② 답변 글이 아니므로 replyno의 값은 number와 같은 4가 됩니다.
    ③ 답변 글이 아니므로 replyst의 값은 ‘AAAAA’가 됩니다.

  5. 첫 번째 글(number=1)의 답변 글을 등록할 경우



    ① number는 자동 증가하므로 5가 됩니다.
    ② 원 글(number=1)의 replyst의 값은 ‘AAAAA’입니다.
    ③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다. (0부터 시작합니다.)
    ④ replyno(원 글의 번호)는 1이 됩니다.
    ⑤ replyno=1이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(역시 하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=1입니다.
    ⑥ number=1의 replyst 값이 ‘AAAAA’인데, 깊이+1(=1)번째 문자가 ‘A’입니다.
    ⑦ ‘A’ 다음의 문자는 ‘B’입니다.
    ⑧ replyst 값은 ‘BAAAA’입니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

  6. 두 번째 글의 답변 글(number=3)의 답변 글을 등록할 경우



    ① number는 자동 증가하므로 6이 됩니다.
    ② 원 글(number=3)의 replyst의 값은 ‘BAAAA’입니다.
    ③ 원 글의 깊이(처음 나오는 ‘A’)는 1입니다. (0부터 시작합니다.)
    ④ replyno(진짜 원 글의 번호)는 2가 됩니다.
    ※ [주의!!!] 답변형 게시판 Type1과 다릅니다.
    여기서 원 글은 number=3이 아닙니다. 비록 number=3의 답변글이기는 하지만, number=3의 글이 number=2의 글의 답변글이므로, number=3의 원 글인 number=2로 해야 합니다.
    ②와 ④에서의 원 글의 의미는 다릅니다. 그래서 다음부터 replyno를 ‘진짜 원 글’(^^)이라고 하겠습니다. 주의!!!!

    ⑤ replyno=2이고 깊이+1(=2)번째 문자를 제외한 나머지 문자(B_AAA)가 일치하는 글(nuber=3 하나밖에 없네요.) 중에서 가장 큰 reply값을 가진 글의 number=3입니다.
    ⑥ number=3의 replyst 값이 ‘BAAAA’인데, 깊이+1(=2)번째 문자가 ‘A’입니다.
    ⑦ ‘A’ 다음의 문자는 ‘B’입니다.
    ⑧ replyst 값은 ‘BBAAA’입니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

  7. 두 번째 글의 답변 글의 답변 글(number=6)의 답변 글을 등록할 경우



    ① number는 자동 증가하므로 8이 됩니다.
    ② 원 글(number=6)의 replyst의 값은 ‘BBAAA’입니다.
    ③ 원 글의 깊이(처음 나오는 ‘A’)는 2입니다. (0부터 시작합니다.)
    ④ replyno(진짜 원 글의 번호)는 2가 됩니다.
    ⑤ replyno=2이고 깊이+1(=3)번째 문자를 제외한 나머지 문자(AA_AA)가 일치하는 글(2,3,6) 중에서 가장 큰 reply값을 가진 글은 number=6입니다.
    ⑥ number=6의 replyst 값이 ‘BBAAA’인데, 깊이+1(=3)번째 문자가 ‘A’입니다.
    ⑦ ‘A’ 다음의 문자는 ‘B’입니다.
    ⑧ replyst 값은 ‘BBBAA’입니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.

  8. 다시 두 번째 글(number=2)의 답변 글을 등록할 경우



    ① number는 자동 증가하므로 9가 됩니다.
    ② 원 글(number=2)의 replyst의 값은 ‘AAAAA’입니다.
    ③ 원 글의 깊이(처음 나오는 ‘A’)는 0입니다.
    ④ replyno(진짜 원 글의 번호)도 2가 됩니다.
    ⑤ replyno=2이고 깊이+1(=1)번째 문자를 제외한 나머지 문자(_AAAA)가 일치하는 글(2,3) 중에서 가장 큰 reply값을 가진 글은 number=3입니다.
    ⑥ number=3의 replyst 값이 ‘BAAAA’인데, 깊이+1(=1)번째 문자가 ‘B’입니다.
    ⑦ ‘B’ 다음의 문자는 ‘C’입니다.
    ⑧ replyst 값은 ‘CAAAA’입니다.
    ⑨ 목록을 보여줄 때는 replyno를 내림차순으로 정렬한 상태에서 reply를 기준으로 오름차순 정렬합니다.


어렵죠…
이 부분은 몇 번이고 반복하면서 봐야 됩니다.

우리가 앞에서 실습한 게시판을 답변형 게시판으로 바꾸려면 이 방법(TYPE 2)을 사용해야 합니다.
그러니 더더욱 꼭~ 이해를 해주시기 바랍니다.

정말 정말 오랜만에, 동주아빠 손병목이었습니다.

Prev
   답변형 게시판 만들기 (1/4) 테이블 수정

손병목
Next
   [참고] 뽀~너스! 댓글(코멘트) 달기 구현 원리

손병목


Copyright 1999-2021 Zeroboard / skin by Zetyx