답글, 댓글 로직 정보
답글, 댓글 로직
본문
하나의 테이블에서 원글의 답글과 댓글의 답글을 모두 해결하는 방식을 찾고자 합니다.
테이블의 구조를 다음과 같이 구성합니다.
컬럼명 |
종류 | 설명 |
wr_id |
int | 고유아이디 |
wr_parent |
int | 부모아이디 |
wr_comment |
int | 0이면 원글, 아니면 댓글 |
wr_reply | varchar(10) | 0~9 그리고 a~z 36진수 사용 0은 제외 깊이는 10개 까지로 한정함 |
wr_comment_cnt | int | 원글에서 댓글의 수를 저장 |
wr_subject | varchar(255) | 제목 |
글이 다음과 같이 저장되어 있다고 했을때
SQL 질의: SELECT * FROM `a_write` LIMIT 0, 25 ;
행 : 14
wr_id | wr_parent | wr_comment | wr_reply | wr_comment_cnt | wr_subject |
---|---|---|---|---|---|
1 | 1 | 0 | 5 | 원글1 | |
2 | 1 | 0 | 1 | 0 | 원글1-1 |
3 | 1 | 0 | 2 | 0 | 원글1-2 |
4 | 1 | 0 | 11 | 0 | 원글1-1-1 |
5 | 2 | 0 | 0 | 원글2 | |
6 | 2 | 0 | 1 | 0 | 원글2-1 |
7 | 1 | 1 | 1 | 댓글1 | |
8 | 1 | 2 | 2 | 댓글2 | |
9 | 1 | 3 | 0 | 댓글3 | |
10 | 1 | 2 | 1 | 0 | 댓글2-1 |
11 | 1 | 2 | 11 | 0 | 댓글2-1-1 |
12 | 1 | 1 | 1 | 0 | 댓글1-1 |
13 | 2 | 0 | 2 | 0 | 원글2-2 |
14 | 1 | 0 | 21 | 0 | 원글1-2-1 |
원글을 표시할때는 이 쿼리를 실행합니다.
답변의 깊이(depth)는 wr_reply 의 갯수로 처리할수 있습니다.
SQL 질의: SELECT * FROM `a_write` where wr_comment = 0 order by wr_parent desc, wr_reply LIMIT 0, 25 ;
행 : 8
wr_id | wr_parent | wr_comment | wr_reply | wr_comment_cnt | wr_subject |
---|---|---|---|---|---|
5 | 2 | 0 | 0 | 원글2 | |
6 | 2 | 0 | 1 | 0 | 원글2-1 |
13 | 2 | 0 | 2 | 0 | 원글2-2 |
1 | 1 | 0 | 5 | 원글1 | |
2 | 1 | 0 | 1 | 0 | 원글1-1 |
4 | 1 | 0 | 11 | 0 | 원글1-1-1 |
3 | 1 | 0 | 2 | 0 | 원글1-2 |
14 | 1 | 0 | 21 | 0 | 원글1-2-1 |
1번 게시물 만을 모아보는 경우에는 이렇게 쉽게 처리할수 있습니다.
SQL 질의: SELECT * FROM `a_write` where wr_parent=1 and wr_comment = 0 order by wr_parent desc, wr_reply LIMIT 0, 25 ;
행 : 5
wr_id | wr_parent | wr_comment | wr_reply | wr_comment_cnt | wr_subject |
---|---|---|---|---|---|
1 | 1 | 0 | 5 | 원글1 | |
2 | 1 | 0 | 1 | 0 | 원글1-1 |
4 | 1 | 0 | 11 | 0 | 원글1-1-1 |
3 | 1 | 0 | 2 | 0 | 원글1-2 |
14 | 1 | 0 | 21 | 0 | 원글1-2-1 |
1번의 코멘트 만 노출하는 경우에는 이렇게 처리합니다.
SQL 질의: SELECT * FROM `a_write` where wr_parent = 1 and wr_comment > 0 order by wr_comment, wr_reply LIMIT 0, 25 ;
행 : 6
wr_id | wr_parent | wr_comment | wr_reply | wr_comment_cnt | wr_subject |
---|---|---|---|---|---|
7 | 1 | 1 | 1 | 댓글1 | |
12 | 1 | 1 | 1 | 0 | 댓글1-1 |
8 | 1 | 2 | 2 | 댓글2 | |
10 | 1 | 2 | 1 | 0 | 댓글2-1 |
11 | 1 | 2 | 11 | 0 | 댓글2-1-1 |
9 | 1 | 3 | 0 | 댓글3 |
위와 같이 몇개 안되는 샘플 데이트로 살펴 보았지만 충분히 원글의 답글과 댓글의 답글을 표현할수 있는것을 확인하였습니다.
0
댓글 1개

이것을 간과했네요.