대댓글 DB 스키마 설계
조회수 19759회
안녕하세요. 게시판 개발 중 대댓글(댓글의 댓글) 기능을 구현하려고 합니다.
아무리 생각해보고 검색해봐도 헷갈리네요.
도움 부탁드리려고 합니다.
우선 제가 찾아본 결과로 DB 를 설계한 것으로 질문 드리자면,
- 댓글 테이블 -
cmt_no: 댓글 No (pk)
content: 내용
parent: parent 댓글 No
depth: 1-댓글, 2-대댓글
seq: 댓글 순서
으로 설계하였고,
ㄱ. 일반 댓글은 parent 값을 가지지 않습니다.
ㄴ. 대댓글은 parent 댓글 No 를 가집니다.
ㄷ. 첫 번째 대댓글은 parent 의 seq + 1 값을 가집니다.
ㄹ. 일반 댓글은 depth 1 대댓글은 depth 2 이며 대댓글에 댓글은 쓸 수 없습니다. ( 즉 depth 값은 1 또는 2 )
아래 이미지는 db 를 조회한 모습입니다.
다음 아래 이미지는 실제로 게시판에서 본 댓글을 순서대로 본 모습인데요
질문
1. 제가 설계한 대댓글을 위한 db 구조가 맞나요?
2. 맞다면, 어떻게 조회 쿼리를 짜야 아래 이미지처럼 조회할 수 있을까요?
1 답변
-
1. 대댓글 DB 구조가 맞나요?
depth컬럼을 댓글과 대댓글을 구분하기 위해 쓰신거라면 depth컬럼은 굳이 필요 없습니다. parent의 null 여부로 판단할 수 있으니까요.
2. 어떻게 조회 쿼리를 짜야하나요?
결과를 보면 댓글은(parent가 null) 자신의 cmt_no가 작을수록 먼저 조회됩니다. 대댓글은 parent의 cmt_no가 작을 수록 먼저 조회되어야 합니다.
따라서
- 내가 대댓글이면(parent = null), 정렬 기준은 cmt_no이고
- 그렇지 않으면 정렬 기준은 parent 입니다.
SELECT * FROM COMMENTS ORDER BY IF(ISNULL(PARENT), CMT_NO, PARENT), SEQ;
로 조회할 수 있네요.
아래 이미지는 제 컴퓨터 mysql server에서 위 sql을 돌린 결과입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력