본문 바로가기
Spring

moa(3)

by Coarti 2024. 2. 22.

대댓글 구현에 대한 이해를 기록한다

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