답변형 게시판 정열 로직 총정리
순서는 무작위로 생각나는 대로입니다.
※모든 경우에서 리플의 깊이는 생략합니다. 정열에 이부분은 불필요하며 출력에만 필요하므로 로직과는 무
관하니까요.
※같은 깊이의 리플에 대해서 나중에 쓴글이 위나 아래로 가는 것은 약간의 코딩만 바꾸면 되므로 여기서
는 나중에 리플단것이 위로가는 것으로 그냥 설명합니다. 약간 덧붙이자면 리플달때 그 그룹내에서 같은 리
플 깊이의 가장 나중에 써진 글과 여기에 딸린 마지막 리플의 번호등과 연관해서 정열에 필요한 값을 주면 
됩니다. 잘 생각해보세요.
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
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 해줌