

게시판에 들어가면 게시물 table에 저장된 자료들을 foreach문으로 나열해 놓은 모습이다. 그러나 하나가 빠졌다. 바로 추천 부분.. 추천 부분은 따로 설정하지 않고 0으로 해놨다. 지난번에 포스팅해서 알겠지만 추천 테이블을 따로 있다. 그래서 이를 조인하여 추천 수 count를 추출하는 방식으로 하려 했으나 잘 되지 않았다. 결국 db 관련 정보들을 찾아본 결과 방법을 알아냈다.

board 테이블과, board_post 테이블은 이미 조인되어 있었던 상황이었다.(게시판 이름(board)에 매칭되는 게시물들(board_post)을 조회해야 했기 때문) 나는 그 쿼리문을 다음과 같이 수정했다.
먼저 게시물 추천 테이블인 board_post_like 테이블을 LEFT OUTER JOIN 한다. 추천 되어있지 않은 게시물 또한 조회해야 하기 때문이다. 그리고 특정 컬럼을 조회하는 select 뒷 부분에 서브쿼리를 하나 넣는다(괄호로 된 부분)
서브쿼리를 해석 해 보자면, 해당 게시물의 넘버에 매칭되는 해당 추천 테이블들의 갯수 값을 조회한다. fk로 걸어 놓은 컬럼의 갯수가 2개라면 2개, 1개라면 1개 이런식... 그리고 AS문을 이용하여 이 서브쿼리로 만든 컬럼의 이름을 지정한다(post_like_count)
마지막으로 중요한 것... LEFT OUTER JOIN을 했기 때문에, 만약 추천 테이블의 행이 2개라면 해당 게시물은 2개로 나타나게 된다. 그래서 SELECT 뒤에 DISTINCT를 걸어서 같은 행이 나올 경우 생략을 하도록 하였다.

그럼 이런 식으로 테이블이 생성된다. 맨 오른쪽을 보면 post_like_count 컬럼이 정상적으로 조회되는 걸 확인할 수 있다. 이제 이 테이블을 뷰에 보여지도록 하자..
솔직히 약간 해맸다. 서브쿼리 부분으로 만든 컬럼값을 DTO에 어떻게 담아낼지 알지 못했기 때문.. 하지만 그 동안에 배웠던 논리들을 적용시켜서 해봤다.

먼저 추천수 테이블을 나타내는 VO에 들어가서 서브쿼리로 만든 컬럼 이름 (int postLikeCount) 을 추가한다.

Xml에 와서 이미 만들어져 있는 쿼리를 다음과 같이 수정한다. resultMap도 추천수 테이블의 association을 추가한다.

조인을 했으니까 dto 역시 postLikeVO를 추가


log.info로 해당 게시판 정보를 조회한 결과, postLikeVO 부분에 맨 끝에 보면 postLikeCount 값이 제대로 불려저오는 걸 확인할 수 있다.

마지막으로 뷰에 가서 0으로 되어 있는 추천 수를 이런식으로 수정하면 끝

이제 실험해볼 차례, 추천 수 부분이 정상적으로 조회되는 걸 확인할 수 있다.
'프로젝트(영화커뮤니티)' 카테고리의 다른 글
| 8. [JavaScript] Uncaught SyntaxError: missing ) after argument list 오류 해결법 (1) | 2023.12.05 |
|---|---|
| 7. Request method 'GET' not supported 해결 (0) | 2023.12.04 |
| 5. 게시물 추천 : Insert + NOT EXIST (중복 제거) (0) | 2023.11.29 |
| 4. 댓글 이미지 집어넣기 : MultipartFile, formData (0) | 2023.11.28 |
| 3. 댓글 이미지 집어넣기 : SELECT LAST_INSERT_ID() (0) | 2023.11.28 |