답변형 게시판 정열 로직 총정리
순서는 무작위로 생각나는 대로입니다.
※모든 경우에서 리플의 깊이는 생략합니다. 정열에 이부분은 불필요하며 출력에만 필요하므로 로직과는 무
관하니까요.
※같은 깊이의 리플에 대해서 나중에 쓴글이 위나 아래로 가는 것은 약간의 코딩만 바꾸면 되므로 여기서
는 나중에 리플단것이 위로가는 것으로 그냥 설명합니다. 약간 덧붙이자면 리플달때 그 그룹내에서 같은 리
플 깊이의 가장 나중에 써진 글과 여기에 딸린 마지막 리플의 번호등과 연관해서 정열에 필요한 값을 주면
됩니다. 잘 생각해보세요.
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
1. 그룹과 그룹내 순서(정수형) 부여하기
num - 글의 고유번호
group - 글의 그룹번호
step - 그룹내의 순서
num group step
-----------------------------
1 1 1
2 2 1
3 1 2
4 1 5
5 5 1
6 1 3
7 1 6
8 1 4
9 5 2
group DESC, step ASC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
리플을 달 경우 부모글의 그룹을 상속받고 부모글의 스탭에서 +1 한 값을 가지며, 이 값 이상의 스탭값을
가지는 같은 그룹의 모든 스탭에 대해서 +1 해주는 방식을 취한다.
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
2. 그룹과 그룹내 순서(실수형) 부여하기
num - 글의 고유번호
group - 글의 그룹번호
step - 그룹내의 순서, 실수형
num group step
-----------------------------
1 1 0
2 2 0
3 1 0.5
4 1 0.75
5 5 0
6 1 0.625
7 1 0.875
8 1 0.6875
9 5 0.5
group DESC, step ASC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
리플을 달 경우 부모글의 그룹을 상속받고 부모글의 스탭과 부모글 바로 아래의 리플의 스탭값의 평균을 스
탭으로 부여함. 바로 아래의 리플이 존재하지 않을 경우는 +1을 해준후 /2 해줌. 그룹내 다른 글에대해서
업데이트 해줄 필요 없음.
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
3. 그룹과 그룹내 순서(문자형) 부여하기
num - 글의 고유번호
group - 글의 그룹번호
step - 그룹내의 순서, 문자형
num group step
-----------------------------
1 1 <NULL>
2 2 <NULL>
3 1 A
4 1 B
5 5 <NULL>
6 1 AA
7 1 BA
8 1 AAA
9 5 A
group DESC, step ASC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
리플을 달 경우 부모글의 그룹을 상속받고 부모글의 스탭에서 + 순서에 따른 알파뱃을 부여함.
같은 깊이의 3번째 리플일 경우 + C 가 되는 방식. 역시 다른 글의 업데이트가 없이 수행가능.
운영상의 기교가 필요할듯...
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
4. 한개의 필드로 정열하기 - 순서값이 1부터 글숫자 만큼 쫙 정열되는 로직
num - 글의 고유번호
step - 그룹내의 순서
num step
-----------------------------
1 6
2 7
3 5
4 2
5 9
6 4
7 1
8 3
9 8
step DESC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
가장 상위의 부모글을 쓰면 가장 큰 step+1 값을 가짐.
리플일 경우 부모의 step값을 상속받고 전체에서 이 값보다 큰 step을 가지는 글에 대해서 step+1 해줌
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
5. 위로직의 역순 적용
num - 글의 고유번호
step - 그룹내의 순서
num step
-----------------------------
1 9,999,997
2 9,999,998
3 9,999,996
4 9,999,993
5 10,000,000
6 9,999,995
7 9,999,992
8 9,999,994
9 9,999,999
step ASC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
가장 상위의 부모글을 쓰면 가장 큰 step-1 값을 가짐.
리플일 경우 부모의 step값을 상속받고 전체에서 이 값보다 큰 step을 가지는 글에 대해서 step-1 해줌
미리 전체 글수를 한정지어야 함. 인덱스로 설정하여 ORDER BY 사용하지 않고도 정열시킬수 있음.
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
6. 한개의 필드로 정열하기 - 리플의 갯수를 한정하는 방식
num - 글의 고유번호
step - 그룹내의 순서
num step
-----------------------------
1 100
2 200
3 99
4 96
5 300
6 98
7 95
8 97
9 299
step DESC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
가장 상위의 부모글을 쓰면 가장 큰 step+100 값을 가짐. 더해주는 숫자 -1 만큼만 리플이 허용됨.
리플일 경우 부모의 step-1을 가지고, 그룹에서만 이 값보다 작은 step을 가지는 글에 대해서 step-1 해줌
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
7. 위로직의 역순적용
num - 글의 고유번호
step - 그룹내의 순서
num step
-----------------------------
1 1,000,000,000
2 999,999,900
3 1,000,000,001
4 1,000,000,004
5 999,999,800
6 1,000,000,002
7 1,000,000,005
8 1,000,000,003
9 999,999,801
step ASC
5 세번째 부모글
→9 답변글
2 두번째 부모글
1 첫번째 부모글
→3 답변글
→6 답변글의 답변글
→8 답변글 깊이 3단계
→4 답변글
→7 답변글의 답변글
글의 한계를 미리 정해놓음. 가장 상위의 부모글을 쓰면 가장 큰 앞 그룹의 부모글 step-100 값을 가짐.
리플일 경우 부모의 step+1을 가지고, 그룹에서만 이 값보다 큰 step을 가지는 글에 대해서 step+1 해줌