댓글 달기
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 : 들여쓰기 정도를 나타내기 위한 용도
출처 : 개발팁
참고 : 개발팁 - 댓글달기 정의