- 지역 ssr로 뿌리기 위한 DB
select city from region_tb

- 지역 선택하면 영화관 나올 수 있는 DB쿼리문
SELECT rt.city, ct.name
FROM REGION_TB rt
INNER JOIN cinema_tb ct ON rt.id = ct.region_id
WHERE rt.id = 2;

- 영화나올 수 있게
- 일단 영화, 쇼타임 조인 → 영화 id로 이름, 등급, 스크린 번호, 시작시간 찾기
select distinct mt.movie_nm, mt.rating_grade, st.screen_id, st.started_at from showtime_tb st
inner join movie_tb mt on st.movie_id = mt.id
where mt.id=1

2번째 영화 선택 시

b. 상영관 아이디로 영화 찾는법
- 상영관이 1일 때 영화들
SELECT *
FROM showtime_tb st
LEFT OUTER JOIN screen_tb stb ON st.screen_id = stb.id
LEFT OUTER JOIN movie_tb m ON st.movie_id = m.id
WHERE stb.id = 1;

c. 영화관 id로 영화 찾는 법
- 영화관 id = 1일 때 상영관들
select * from cinema_tb ct
inner join screen_tb st on ct.id = st.cinema_id
where ct.id = 1

영화관 1일 때 상영관 번호만 찾기
select st.id from cinema_tb ct
inner join screen_tb st on ct.id = st.cinema_id
where ct.id = 1

- 스크린 1일 때 쇼타임 합친 것
SELECT *
FROM showtime_tb st
LEFT OUTER JOIN screen_tb stb ON st.screen_id = stb.id
WHERE stb.id = 1;

- 영화관 1 일 때 영화들
SELECT DISTINCT m.*
FROM showtime_tb st
LEFT OUTER JOIN screen_tb stb ON st.screen_id = stb.id
LEFT OUTER JOIN cinema_tb ctb ON stb.cinema_id = ctb.id
LEFT OUTER JOIN movie_tb m ON st.movie_id = m.id
WHERE ctb.id = 1;

영화 + 쇼타임
select * from showtime_tb st
left outer join movie_tb mt on st.movie_id = mt.id

생각 변환
지역 누르면 영화관, 영화관 누르면 영화 지역 아이디만 알면 모든 것을 아는 것이 아닌
나눠서 생각해 보자!!
- 지역id선택시 영화관 나올 수 있게
- 영화관 id선택시 영화 나올 수 있게(이 부분이 제일 어려웠다. 너무 멀리 있는 정보를 받아와야 했기에)
- 영화 선택 시 날짜가 나오는데 고민이 있었다. 일단 js로 오늘 날짜 + 5 하는 걸로 결정
- 그냥 누르면 서버하고 연결 안하고 js로 오늘 날짜 + 5일을 그냥 올릴건지
- 영화 선택 시 상영시간이 있는 날짜만 나오게 할 것인지(이게 좋은게 상영시간 없는 날짜가 굳이 보일 필요가 없다 생각했다. 클릭해도 없는 날이면 안보이는게 좋지 않은가?)
- 날짜 선택 시 해당 영화와 해당 날짜에 맞는 상영시간 보여주기
- 상영시간 선택 시 확인 버튼이 나오고
- 확인 버튼 누르면 세션으로 seat페이지로 보내기
- 영화, 쇼타임 합치고 스크린 1236일 때 조회
SELECT *
FROM showtime_tb st
LEFT OUTER JOIN movie_tb mt ON st.movie_id = mt.id
WHERE mt.id IN (1, 2, 3, 6);
- 영화, 쇼타임 합치고 스크린 영화관 아이디 1 일 때 조회
SELECT *
FROM showtime_tb st
LEFT OUTER JOIN movie_tb mt ON st.movie_id = mt.id
WHERE mt.id IN (select st.id from cinema_tb ct
inner join screen_tb st on ct.id = st.cinema_id
where ct.id = 1);
- 이거 JPQL
SELECT st
FROM Showtime st
LEFT JOIN st.movie mt
WHERE mt.id IN (
SELECT s.id
FROM Cinema c
JOIN c.screens s
WHERE c.id = :cinemaId
)
영화관 1일 때 영화 이름, 수위
SELECT distinct mt.movie_nm, mt.rating_grade
FROM showtime_tb st
LEFT OUTER JOIN movie_tb mt ON st.movie_id = mt.id
WHERE mt.id IN (select st.id from cinema_tb ct
inner join screen_tb st on ct.id = st.cinema_id
where ct.id = 1);
문제가 있었다!
IN쿼리 안에
select st.id from cinema_tb ct
inner join screen_tb st on ct.id = st.cinema_id
where ct.id = 1
이 쿼리의 결과를 넣어야 하는데 넣으려고 하니까 못넣겠음..
날짜를 선택해서 구할 수 있는 방법
sql
SELECT * FROM SHOWTIME_TB WHERE DAY(started_at) = 12;
JPQL
SELECT s FROM Showtime s WHERE FUNCTION('DAY', s.startedAt) = 12
또 신경써야 할 게 있다 영화 id로도 확인해야한다!
sql
SELECT * FROM SHOWTIME_TB
WHERE DAY(started_at) = 23
AND movie_id = 1;
JPQL
SELECT s FROM Showtime s
WHERE FUNCTION('DAY', s.startedAt) = 23
AND s.movieId = :movieId
Share article