안녕하세요 선배님들 현재 동영상에 대한 좋아요 기능을 하고있는데 궁금한 점이 있어서 질문 드립니다. 도움 주시면 감사하겠습니다.
첫번째 사진에 style_kind 에 동영상에 대한 kind 정보가 있습니다...
25번 , 21번 , 1 번이라는 유저가 각각 스타일이라는 동영상을 올렸습니다..
두번째 사진은 첫번째 사진의 유저가 올린 동영상에 대한 좋아요 입니다
4번의 유저가 25번유저의 스타일을 좋아요 눌렀고 , 26번 유저가 1번유저의 스타일에 대해서 좋아요를 눌렀습니다..
그렇게 했더니 세번째 사진처럼 값이 나오게 되었습니다
네번째 사진처럼 나왔으면 좋겠는데 애초에 api를 따로 만들어서 2개를 돌려야 할지 아니면 조인으로 걸어서 해결 할 수 있는지 궁금합니다... 퀴리는 아래에 있습니다..
SELECT
aa.style_code
,aa.user_code
,aa.style_kind
,aa.style_video
,aa.admin_accept
,aa.admin_reject
,aa.modFl
,aa.regDt
,cc.user_photo
,coalesce(bb.like_state, 'initial') AS like_state
FROM
style AS aa
LEFT outer JOIN
style_like AS bb
ON
bb.style_code = aa.style_code
JOIN
user AS cc
ON
aa.user_code = cc.user_code
WHERE
aa.style_kind = #{style_kind}
AND
aa.admin_accept = 1
AND
cc.user_blockd = 'N'
AND
bb.user_code IS NULL
OR
bb.user_code = #{user_code}
ORDER by
RAND()
LIMIT 20
동영상을 랜덤으로 20개를 가저와야 하는데 좋아요에 대한 값이 있야서 내가 좋아요 한것은 like 그게 아니면 initial 로 값이 나와야 합니다... 조인에 문제가 있는걸까요? 도움 주시면 감사하겠습니다.
b.user_code 에 대한 조건 위치 오류입니다.
- WHERE 절 이 아닌 ON 절에 와야 합니다.
-- 1. 전체 조인 후 정렬하여 20건 추출하는 것 보다는. -- SELECT a.style_code , a.user_code , a.style_kind , a.style_video , a.admin_accept , a.admin_reject , a.modFl , a.regDt , c.user_photo , COALESCE(b.like_state, 'initial') like_state FROM style a LEFT OUTER JOIN style_like b ON b.style_code = a.style_code AND b.user_code = #{user_code} INNER JOIN user c ON a.user_code = c.user_code WHERE a.style_kind = #{style_kind} AND a.admin_accept = 1 AND c.user_blockd = 'N' ORDER BY RAND() LIMIT 20 ; -- 2. 정렬하여 20건 추출후 20건만 조인하는 것이 좋습니다.. -- SELECT a.style_code , a.user_code , a.style_kind , a.style_video , a.admin_accept , a.admin_reject , a.modFl , a.regDt , a.user_photo , COALESCE(b.like_state, 'initial') like_state FROM (SELECT a.style_code , a.user_code , a.style_kind , a.style_video , a.admin_accept , a.admin_reject , a.modFl , a.regDt , c.user_photo FROM style a INNER JOIN user c ON a.user_code = c.user_code WHERE a.style_kind = #{style_kind} AND a.admin_accept = 1 AND c.user_blockd = 'N' ORDER BY RAND() LIMIT 20 ) a LEFT OUTER JOIN style_like b ON b.style_code = a.style_code AND b.user_code = #{user_code} ;