대댓글 구현에 대한 이해를 기록한다
SELECT c.*, p.* FROM Comment c
left JOIN Comment p ON c.parent_id = p.comment_id
WHERE c.board_id = 1
ORDER BY COALESCE(p.comment_id, c.comment_id), c.comment_date ASC;
SELECT c.* FROM Comment c;
SELECT c.*, p.* FROM Comment c
left JOIN Comment p ON c.parent_id = p.comment_id
WHERE c.board_id = 1;
SELECT c.* FROM Comment c
right JOIN Comment p ON c.parent_id = p.parent_id ;
-- 결론
SELECT c.* FROM Comment c
left JOIN Comment p ON c.parent_id = p.comment_id
WHERE c.board_id = 1
ORDER BY COALESCE(p.comment_id, c.comment_id), c.comment_date ASC;
-- JPQL
-- select c from Comment c left join fetch c.parent p where c.board.id = :id order by coalesce(p.id, c.id), c.commentDate
-- 부모아이디로 부모의 댓글번호를 찾는다.
-- 이것을 전제로
-- 자 이제 정렬할 때 부모밑에 바로 자식이 정렬 되어야 하니까
-- 부모아이디로 묶여서 정렬 되어야하는데
-- 조회를 먼저 시작하자면
-- 부모아이디가 null이니까 조인되는 컬럼은 아무 데이터가 없는 null 채워진다
-- 이 의미는 부모댓글이라는 의미이다
-- 부모아이디가 있다면 그 부모 컬럼을 붙힌다
-- 이 의미는 해당 부모의 자식 댓글이라는 의미이다
-- 각 컬럼별로 부모아이디 기준으로 정렬하는데 null이면 부모댓글이란 뜻이니까
-- 현재 댓글 아이디로 정렬되게 한다
-- 그리고 부모댓글로 정렬을 했으니 대댓글을 달 때
-- 마지막 댓글의 댓글이 아닌 중간에 있던 댓글에 댓글을 추가할 경우
-- 댓글이 마지막에 존재하지 않게되니 생성된 날짜를 기준으로 정렬을 한번 더한다
-- 그래서 order by에 부모아이디가 가장 먼저 나와야 부모아이디 기준으로 날짜정렬을 하게된다
728x90
'Spring' 카테고리의 다른 글
| Mybatis mapper xml 파일 위치 지정 (0) | 2024.06.10 |
|---|---|
| Spring Legacy pom.xml 초기설정 (0) | 2024.06.03 |
| moa(1) (0) | 2024.02.15 |
| 프로젝트 준비 (0) | 2024.02.07 |
| 좋은 객체 지향 설계 5가지 원칙(SOLID) (0) | 2024.01.13 |