by 도뎡이 [SQL Query] mysql 댓글 좋아요/싫어요 로그인 회원 댓글 좋아요 여부 [2022.05.25 11:13:35]
안녕하세요, 선배님들!
댓글 리스트에 좋아요/싫어요 개수와 로그인한 회원이 좋아요 또는 싫어요를 클릭하였는지 여부를 확인할 수 있는 쿼리를 작성 중입니다.
테이블은 댓글(Main), 회원(Join), 댓글 좋아요(Join) 총 세 가지를 연결하게 되는데요.
하나의 SQL 쿼리에서 댓글 & 회원 정보, 좋아요/싫어요 개수, 로그인한 회원의 댓글 좋아요/싫어요 여부를 조회해야 하는데,
결과를 얻기가 쉽지 않아 선배님들께 조언을 구해보고자 합니다..
우선, 현재 작성된 쿼리는 다음과 같습니다.
SELECT C.id -- 댓글 번호 , C.member_id AS '댓글 작성 회원' , M.login_id -- 회원 id , M.name -- 회원명 , COUNT(CASE WHEN CL.like_type = 1 THEN 1 END) AS like_cnt -- 특정 댓글의 좋아요 수 , COUNT(CASE WHEN CL.like_type = 0 THEN 1 END) AS bad_cnt -- 특정 댓글의 싫어요 수 , (CASE WHEN CL.member_id = 19 THEN CL.like_type ELSE '' END) AS like_type -- 로그인한 회원의 좋아요/싫어요 클릭 여부 FROM tb_comment AS C -- 댓글 INNER JOIN tb_member AS M ON C.member_id = M.id -- 회원 LEFT OUTER JOIN tb_comment_like AS CL ON C.id = CL.comment_id -- 댓글 GROUP BY C.id -- 댓글 번호 , C.member_id , M.login_id -- 회원 id , M.name -- 회원명 , (CASE WHEN CL.member_id = 19 THEN CL.like_type ELSE '' END) -- (group by에 포함되는 게 맞는지?) ORDER BY C.id DESC
좋아요/싫어요 여부를 제외하면 나머지 데이터는 정상적으로 출력이 되지만
LEFT JOIN에 의해 데이터가 정상 출력되지 않는 경우가 있는 듯합니다..
앞의 SQL 쿼리를 어떤식으로 처리하면 좋을지 피드백 주시면 감사드리겠습니다!
결과 예시 HTML 페이지와 쿼리 실행 결과도 첨부하도록 하겠습니다!
소중한 답변 미리 감사드립니다 선배님들. 좋은 하루 되세요 :)
-- 그룹바이에 포함시킬게 아니라 집계함수로 감싸 줘야 합니다. -- 변경전 -- SELECT ... , (CASE WHEN CL.member_id = 19 THEN CL.like_type ELSE '' END) AS like_type FROM tb_comment GROUP BY ... , (CASE WHEN CL.member_id = 19 THEN CL.like_type ELSE '' END) ; -- 변경후 -- SELECT ... , MAX(CASE WHEN CL.member_id = 19 THEN CL.like_type END) AS like_type FROM tb_comment GROUP BY ... ;