본문 바로가기

꿈(개발)

게시판 댓글 달기

댓글 달기
id , ref , lvel, step 4필드를 이용한다.
id - 일련번호 ( SEQUENCE를 이용한다 )

댓글이 아닌 형태의 글 입력 방법
- ref 값은 id와 동일하게 한다
- lvel과 step은 0으로 넣는다.

i  r  l  s
1  1  0  0

INSERT INTO MPTextT ( id , ref , lvel, step...  )
VALUES ( SEQ_MPText.NEXTVAL,
 SEQ_MPText.CURRVAL , 0 , 0 ... )
과 같은 형태로 오라클에서는 사용한다.

INSERT INTO MPTextT ( ref , lvel, step...  )
VALUES ( 0 , 0 , 0 ... );
UPDATE MPTextT SET ref = id WHERE ref = 0;
과 같이 MySQL에서는 두문장으로 처리한다.

--

목록볼때 정렬순서는 ref DESC , lvel ASC 순이다.

이와같은 형태로 1,2,3번글이 입력된 후에 정렬된
모습은 아래와 같다.

( i 는 id , r은 ref, l 은 lvel, s는 step을 의미 )

--

i  r  l  s
3  3  0  0
2  2  0  0
1  1  0  0

--

댓글 다는 법
- 원본글의 ref, lvel, step 값을 먼저 읽는다.
- 원본글과 동일한 ref 값을 가지고 있고, 원본글의
  lvel값보다 큰 lvel을 가진 레코드의 lvel 값을
  하나 증가 시켜준다.
- 원본글과 동일한 ref를 가지고, lvel값과 step값은
  하나 증가시켜준 형태로 글이 입력된다. 

--

i  r  l  s
3  3  0  0
2  2  0  0
1  1  0  0


2번글에 댓글
r : 2 , l : 0 , s : 0
r이 2이고 l이 0 보다 큰 글은 없다.
4번 글은 r : 2 , l : 1 , s : 1 형태로 입력된다.

--

i  r  l  s
3  3  0  0
2  2  0  0
4   2  1  1
1  1  0  0

2번글에 대한 댓글 5번이 입력된다.
r : 2 , l : 0 , s : 0
r이 2이고 l이 0 보다 큰 4번의 l 값을 증가시킨다.

i  r  l  s
3  3  0  0
2  2  0  0
5  2  1  1
4   2  2  1
1  1  0  0

r : 2 , l : 1 , s : 1 인 5번글이 들어간다.

--

5번에 대한 댓글로 6번이 들어간다.
r : 2 , l : 1 , s : 1
r이 2이고 l이 1 보다 큰 4번의 l 값을 증가시킨다.

i  r  l  s
3  3  0  0
2  2  0  0
5  2  1  1
4   2  3  1
1  1  0  0

r : 2 , l : 2 , s : 2 인 6번글이 들어간다.

i  r  l  s
3  3  0  0
2  2  0  0
5  2  1  1
6  2  2  2
4   2  3  1
1  1  0  0

step 값은 들여쓰기 정도를 나타낸다.

요령 :
- 댓글다는 Action과 원본글 Action은 구분한다.
  예를 들면 AddOrigTextDbAction ,
  AddRepleTextDbAction ,
- 종이와 연필로 충분히 이해한 다음에 구현한다.
- 각 ref, lvel, step의 용도를 올바로 파악한다.
  ref : 묶어주기 위한 용도
  lvel : 묶음 속에서의 서열을 정하기 위한 용도
  step : 들여쓰기 정도를 나타내기 위한 용도

출처 : 개발팁

참고 : 개발팁 - 댓글달기 정의