반갑습니다!
이번에는
화면기획서가 나온 상태에서 API 서버 개발을 위해
쿼리문을 작성한다는 상황을 가정하고
실습예제 6을 진행해보겠습니다 ^^!
실습예제 6은 영화 리뷰 서비스를 개발하는 상황을 전제로 하겠습니다!
실습예제에 사용할 샘플 데이터는 다음과 같습니다
하단에 파일 첨부하겠습니다 ^^
1. 샘플 데이터
2-1. user 테이블 스키마 구조
이번 예제에 사용할 user 테이블의 스키마 구조입니다 ^^
2-2. movie 테이블 스키마 구조
이번 예제에 사용할 movie 테이블의 스키마 구조입니다 ^^
2-3. review 테이블 스키마 구조
이번 예제에 사용할 review 테이블의 스키마 구조입니다 ^^
2-4. favorite 테이블 스키마 구조
이번 예제에 사용할 favorite 테이블의 스키마 구조입니다 ^^
요구사항 1.
위와 같은 화면이 기획되었다고 할 때,
쿼리문을 작성하는 예제입니다.
< 회원가입 화면 >
서비스 회원가입에 대하여
email, password, name, gender 정보를 받았을 때
해당 데이터를 테이블에 삽입하면 되겠습니다 ^^
INSERT문을 사용하여 해당 테이블의 필드에 대해
값들을 입력해주시면 되는 가장 간단한 문제입니다 ^^
요구사항 2.
위와 같은 화면이 기획되었다고 할 때,
쿼리문을 작성하는 예제입니다.
< 메인화면 >
title, review_cnt, rating_avg 정보를 출력합니다.
요청마다 25개의 데이터를 조회합니다
review_cnt는 내림차순 정렬
rating_avg도 내림차순 정렬입니다.
하트는 즐겨찾기 기능입니다.
(해당 영화에 하트를 누르면 내 즐겨찾기에 저장 됩니다)
문제 번호상 앞 순서에 배정되었지만
사실상 메인화면 개발은 나중에 하는게 맞죠 ^^
메인화면에는 여러가지 정보들이 한 번에 조회되어야 하는 특성상,
다른 기능들이 개발이 된 다음에 통합해서 데이터를 조회하는 구간이니까요 ^^
여기서 그냥 JOIN 연산이 아니라 LEFT JOIN 연산이 사용되어야 하는 이유는,
movie 테이블에 대해서 review 테이블과 favorite 테이블을 합칠 때
해당 영화가 아무 리뷰도 달려있지 않을 수도 있고, 좋아요를 한 개도 받지 못 했을 수도 있습니다
그런데 그냥 JOIN 연산을 수행하면 리뷰가 없거나 좋아요가 없는 영화는
자동으로 제외가 되어 조회 결과가 출력되기 때문입니다 ^^
여기서 좋아요 등록/해제 기능도 추가를 해야죠?
좋아요 기능을 처리할 때 두 가지 방법이 있습니다
첫 번째 방법
좋아요 등록시 favorite 테이블에 레코드를 생성,
좋아요 취소시 favorite 테이블에서 레코드를 삭제하는 방법입니다
두 번째 방법
좋아요 등록시 favorite 테이블에 새로운 레코드를 생성하는건 동일합니다만,
좋아요 취소시 해당 레코드를 삭제하는 것이 아니라 0 ↔ 1의 값을 서로 번갈아 갱신해주면서
토글식으로 처리해주는 방법입니다 ^^
때문에 IF절을 이용하여,
heart 컬럼의 기존값이 1이면 0으로,
0이면 1로 바꾸도록 했죠
0 : 좋아요X
1 : 좋아요O
API 서버 개발시 특정 API를 호출할 때
코드블록 내에 위와 같은 쿼리문이 설계되어 있기 때문에
데이터베이스와 연결된 상태에서 SQL문이 동작하여서
해당 데이터 처리 작업이 수행되죠 ^^
메인화면이 제일 끝판왕인데 문제 배정상 앞 순서에 오게 되었습니다
나머지 문제들은 더 수월하니 금방 설명할 수 있을 것 같습니다 ^^
'MySQL > 실습문제' 카테고리의 다른 글
[EXERCISES] 14. 실습예제(6-3) (0) | 2024.08.10 |
---|---|
[EXERCISES] 13. 실습예제(6-2) (0) | 2024.08.08 |
[EXERCISES] 11. 실습예제(5-2) (0) | 2024.08.08 |
[EXERCISES] 10. 실습예제(5-1) (0) | 2024.08.08 |
[EXERCISES] 9. 실습예제(4) (0) | 2024.08.07 |