Coder Social home page Coder Social logo

mysql_study's Introduction

MySQL_Study

UMC 서버 스터디 Node.js 5주차 미션 '화면을 보고 쿼리 구성하기'를 수행하면서 작성한 SQL 쿼리문이다.

🔒 주어진 ERD


erd

mysql_study's People

Contributors

jangyoujung avatar

Stargazers

 avatar

Watchers

 avatar

mysql_study's Issues

[MySql] 진행 완료 화면

✅ 진행 완료 화면에서는 member_mission의 mission_status 속성이 ‘doneyet’ 즉, 미션은 수행 완료했지만 리뷰는 작성하지 않은 미션들에 대해 출력하도록 셀렉문을 구성했다.

1️⃣ 미션 도전 상태: yetyet

2️⃣ 미션 수행 완료 / 리뷰는 작성 전 - doneyet

✅ 페이징은 member_mission에서 가장 최근에 수정이 이루어진, 즉 가장 최근에 완료한 미션부터 오름차순으로 출력하도록 구성했다.

⚠️ 미션 status 세 가지 종류:

3️⃣ 미션 수행 완료 / 리뷰 작성 완료 - donedone

[MySql] 홈 화면

1️⃣ 상단 동네명과 진행률

✅ SQL에서 point는 키워드인 관계로 point를 mileage로 대체했다.

✅ 닉네임 ‘nickname012’ 회원의 member_id = 1234라고 가정했다.

⚠️ 미션 테이블에서 deadline이 지난 미션은 매일매일 서버가 DB를 확인해 삭제해줘서 ‘유효한 미션’만 존재한다고 가정한다.

➡️ 미션 마감 기한이 지나도 리뷰를 쓸 수 있는 유예기간을 보장하지 못한다.

⚠️ 해결법: 만약 사용자가 미션을 완료하면, 리뷰를 쓸 유예 기간을 한 달 주도록 mission의 deadline 속성에 month+=1 로 갱신한다.

➡️근데 이렇게 하면 완료했지만 미션 자체의 원래 기한 데이터는 사라지므로 좋은 방법이 아닌 것 같다.

⏩ 그냥 매 쿼리에 미션 deadline과 현재 datetime을 비교하는 구문을 추가하고, 미션 테이블에 있는 인스턴스는 마감 기한이 지나도 남겨두는 방향으로 구성했다.

2️⃣ 인증 가능한 미션 목록

첫 번째 조인: region과 store를 조인하여 ‘안암동’ 안에 있는 가게들을 가져온다.

두 번째 조인: 첫째 조인에서 가져온 가게 목록과 미션을 조인하여 안암동에 있는 가게들에 대한 미션을 가져온다.

✅서브 쿼리: 전체 셀렉문의 where 조건 절에 삽입된 서브 쿼리에서는 사용자가 수행한 미션 정보를 담고 있는 member_mission을 사용해서 ‘사용자가 아직 수행하지 않은’ 미션들만 가져올 수 있도록 Not Exist문에 서브 쿼리를 삽입했다.

페이징: deadline이 작은 것→큰 것 오름차순으로 가장 마감일이 임박한 미션부터 3개씩 출력하도록 구성했다(마지막 줄).

✅ 닉네임 ‘nickname012’ 회원의 member_id = 1234라고 가정했다.

[MySql] 리뷰 작성 화면

✅ review 테이블의 id 속성은 auto_increment 속성이라고 가정했다.

✅ 닉네임 ‘nickname012’ 회원의 member_id = 1234라고 가정했다.

❓ ‘진행 완료’ 화면에서 ‘사용자가 완료한 미션’을 클릭시 리뷰로 넘어가는 건데 왜 리뷰 테이블은 멤버 미션 테이블을 참고하지 않는 것일까.

⚠️현재처럼 둘이 연관 관계가 없으면 → ‘진행 완료’ 화면에서 하나의 미션에 대해 여러 리뷰를 작성할 수 있음.

⚠️ review 테이블에 날짜 속성(리뷰를 작성한 날짜) 없어도 되는걸까❓

[MySql] 진행 중 미션 화면

1️⃣진행 중 화면

✅ 홈화면에서 사용자가 도전하고 싶은 미션에 대해 ‘미션 도전!’ 버튼을 누르면 ‘진행 중’ 화면으로 넘어가고 member_mission에 해당 미션이 삽입 된다.

⚠️ 미션 status 세 가지 종류:

1️⃣ 미션 도전 상태: yetyet

2️⃣ 미션 수행 완료 / 리뷰는 작성 전 - doneyet

3️⃣ 미션 수행 완료 / 리뷰 작성 완료 - donedone

→ 즉, 진행 중에서 가져올 미션 데이터는 **‘mission_status = yetyet’**인 미션인 것이다.

→ 진행 완료 화면에서 가져올 미션 데이터는 **‘mission_status = doneyet’**으로 갱신

→ 사용자가 리뷰를 작성하면 **‘mission_status = donedone’**으로 갱신

✅ 닉네임 ‘nickname012’ 회원의 member_id = 1234라고 가정했다.

✅ 페이징은 dealine 날짜가 오름차순 즉, 가장 임박한 미션부터 5개씩 출력하도록 구성했다.

⚠️ member_mission에서 created_at 속성과 updated_at 속성은 자동으로 삽입되도록 테이블 생성시 설정했다고 가정.

RDBMS to OLAP : created_at 과 updated_at

⚠️ mysql에서 status는 키워드이므로 status → mission_status로 대체했다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.