inblog logo
|
keepgoing
    Project

    [Project] DB 쿼리문 필요할 것 같은 것 찾기

    김호정's avatar
    김호정
    Oct 09, 2024
    [Project] DB 쿼리문 필요할 것 같은 것 찾기
    Contents
    생각 변환날짜를 선택해서 구할 수 있는 방법
    1. 지역 ssr로 뿌리기 위한 DB
    select city from region_tb
    notion image
    1. 지역 선택하면 영화관 나올 수 있는 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;
    notion image
    1. 영화나올 수 있게
      1. 일단 영화, 쇼타임 조인 → 영화 id로 이름, 등급, 스크린 번호, 시작시간 찾기
      2. 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
        notion image
         
        2번째 영화 선택 시
        notion image
    b. 상영관 아이디로 영화 찾는법
    1. 상영관이 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;
    notion image
    c. 영화관 id로 영화 찾는 법
    1. 영화관 id = 1일 때 상영관들
    select * from cinema_tb ct inner join screen_tb st on ct.id = st.cinema_id where ct.id = 1
    notion image
    영화관 1일 때 상영관 번호만 찾기
    select st.id from cinema_tb ct inner join screen_tb st on ct.id = st.cinema_id where ct.id = 1
    notion image
     
    1. 스크린 1일 때 쇼타임 합친 것
    SELECT * FROM showtime_tb st LEFT OUTER JOIN screen_tb stb ON st.screen_id = stb.id WHERE stb.id = 1;
    notion image
     
    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;
    notion image
     
    영화 + 쇼타임
    select * from showtime_tb st left outer join movie_tb mt on st.movie_id = mt.id
    notion image
     

    생각 변환

    지역 누르면 영화관, 영화관 누르면 영화 지역 아이디만 알면 모든 것을 아는 것이 아닌
    나눠서 생각해 보자!!
     
    1. 지역id선택시 영화관 나올 수 있게
    1. 영화관 id선택시 영화 나올 수 있게(이 부분이 제일 어려웠다. 너무 멀리 있는 정보를 받아와야 했기에)
    1. 영화 선택 시 날짜가 나오는데 고민이 있었다. 일단 js로 오늘 날짜 + 5 하는 걸로 결정
      1. 그냥 누르면 서버하고 연결 안하고 js로 오늘 날짜 + 5일을 그냥 올릴건지
      2. 영화 선택 시 상영시간이 있는 날짜만 나오게 할 것인지(이게 좋은게 상영시간 없는 날짜가 굳이 보일 필요가 없다 생각했다. 클릭해도 없는 날이면 안보이는게 좋지 않은가?)
    1. 날짜 선택 시 해당 영화와 해당 날짜에 맞는 상영시간 보여주기
    1. 상영시간 선택 시 확인 버튼이 나오고
    1. 확인 버튼 누르면 세션으로 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

    keepgoing

    RSS·Powered by Inblog