구독 정보 뷰 랜더링
구독정보 관련해서 쿼리를 짜볼거다.
ssar로 로그인하고 cos의 프로필가서 구독자 정보를 가져올거다
-- 로그인(1 ssar) -- 구독정보(2 cos)
-- 1번과 3번의 정보(toUserId)가 구독 모달에 출력
select * from Subscribe
select * from user;
select * from Subscribe where fromUserId = 2;
SELECT * FROM User WHERE id = 1 OR id = 3
-- 조인 (user.id - subscribe.toUserId)
SELECT *
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
INNER JOIN을 활용해서 2번 유저를 구독하는 구독자들을 뽑아온다
근데 모든 컬럼들이 필요한게 아니라서 필요한 컬럼들만 갖고 오게 수정해주자
-- 조인 (user.id - subscribe.toUserId)
SELECT u.id, u.username, u.profileImageUrl
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
그리고 ssar이라는 유저(로그인한)가 cos를 구독한 유저들을 구독했는지 안했는지 여부가 필요하다.
-- 로그인(ssar 1), 화면 구독모달(ssar 1, love 3)
SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = 1;
SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = 3;
SQL
복사
ssar이 love를 구독하고 있기 때문에 true값인 1이 떨어진다.
가성 컬럼을 만들어서 거기다가 구독여부를 넣어주면 된다.
스칼라 서브쿼리를 이용해서 넣어주면되는데
스칼라 서브쿼리란 단일행이 리턴되야하면서 셀렉트문이 하나 더 들어간다
-- 스칼라 서브쿼리(단일행을 리턴)
SELECT u.id,
u.username,
u.profileImageUrl,
(select u.id) subscribeState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
틀은 이렇게 짜주고 이제 제대로 구독여부 쿼리를 저기 스칼라 서브쿼리 안에 넣어준다
-- 구독 여부 완성 쿼리
SELECT u.id,
u.username,
u.profileImageUrl,
(SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
이제 로그인 유저랑 구독자 유저랑 동일인지 판단해야한다
-- 동일 유저인지 판단 여부
SELECT u.id,
u.username,
u.profileImageUrl,
(SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState,
1 equalUserState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
-- 동일 유저인지 판단 여부
SELECT u.id,
u.username,
u.profileImageUrl,
(SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState,
(1=u.id) equalUserState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사
select * from Subscribe;
-- 구독수
select COUNT(*) from Subscribe where fromUserId = 3;
-- 구독여부 (ssar(1)로 로그인, cos(2)페이지로 감)
SELECT COUNT(*) from Subscribe where fromUserId = 1 and toUserId = 2;
-- 로그인(1 ssar) -- 구독정보(2 cos)
-- 1번과 3번의 정보(toUserId)가 구독 모달에 출력
select * from Subscribe
select * from user;
select * from Subscribe where fromUserId = 2;
SELECT * FROM User WHERE id = 1 OR id = 3
-- 조인 (user.id - subscribe.toUserId)
SELECT u.id, u.username, u.profileImageUrl
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
-- 로그인(ssar 1), 화면 구독모달(ssar 1, love 3)
SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = 1;
SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = 3;
-- 가상 컬럼 추가
SELECT u.id, u.username, u.profileImageUrl , 1 subscribeState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
-- 스칼라 서브쿼리(단일행을 리턴)
SELECT u.id,
u.username,
u.profileImageUrl,
(select u.id) subscribeState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
-- 구독 여부 완성 쿼리
SELECT u.id,
u.username,
u.profileImageUrl,
(SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
-- 동일 유저인지 판단 여부
SELECT u.id,
u.username,
u.profileImageUrl,
(SELECT TRUE FROM Subscribe WHERE fromUserId = 1 AND toUserId = u.id) subscribeState,
(1=u.id) equalUserState
FROM User u INNER JOIN Subscribe s
ON u.id = s.toUserId
WHERE s.fromUserId = 2;
SQL
복사