[Server] 기능 별 mysql 쿼리 문 작성
2주 first-project를 진행하면서 모든 팀원들이 각자 기능을 맡아 풀스택으로 진행하자는 의견이 나와
서버쪽에서 클라이언트에 전달해 줄 자료를 추출하기위해
쿼리문을 작성하였다
- 구현해야되는 메일함 (받는메일함)
- Login 되었을 때 받아온 유저정보에서 email을 이용 해 메일을 조회한다
조회 한 메일 중메일도착날짜
를현재날짜
와 비교하여 현재날짜이전
의 메일만 자료를 가져온다- Login 되었을 때 받아온 유저정보에서 email을 이용 해 메일을 조회한다
조회 한 메일 중메일도착날짜
를현재날짜
와 비교하여 현재날짜이후
의 메일만 자료를 가져온다
- boolean 값에 따른 화면 랜더링
- 받은메일함 / 도착예정메일함을 확인하였을 때
확인하지 않은 메일이 있다면
메일들의 IsChecked 값을 0에서 1로 바꿔준다 (확인 toggle 유/무)- 메일 중 읽었을 경우에는 IsRead 의 값을 0에서 1로 바꿔준다
작성한 쿼리문
//get/home/checked
//NavBar 받은편지함 토글 여부를 정하는 sql구문
const sql1 = 'SELECT COUNT(id) AS count FROM mails WHERE (receiverEmail=? AND isChecked=0);';
//get/mail/check
//도착예정편지함 토글 유무를 결정하는 쿼리문
const sql2 = `SELECT COUNT(id) AS count FROM mails WHERE receiverEmail = '${email}' AND reserved_at>DATE(NOW()) AND isChecked=0;`
// id를 기준으로 mails에서 receiverEmail = "로그인한사람의 이메일" 이고 오늘 기준으로 도착예정편지함에 들어오는 메일 중 isChecked가 0인 데이터를 count 한다
//patch/mail.reserved
//도착예정편지함 토글 유무를 위해 check 업데이트 쿼리문
const sql3 = `update mails set isChecked = 1
where receiverEmail = "${email}" and date(reserved_at) > date_format(now(), '%Y%m%d');`
//get/mail/receive(받은편지함)
//get/mail/reserved(도착예정편지함) (부등호 방향차이)
const sql4_1 = `select A.id, A.writerEmail, A.receiverEmail, A.reserved_at, A.isChecked, A.isRead, A.created_at, A.updated_at, users.name
from mails AS A
inner join users
ON A.writerEmail = users.email
Where A.receiverEmail = ? and date(reserved_at) > date_format(now(), '%Y%m%d')
ORDER BY A.reserved_at
LIMIT ?,5;`
const params4 = [ email, (Number(page) - 1) * 5]; // 두번째인자는 LIMIT(받아올때 ?번째부터 5개의 데이터를 받아올 것이다)
//도착예정편지 list를 불러오는 쿼리문
//select 한 column 들을 mails 테이블과
//users 테이블의 email = mails의 writerEmail 과 같은조건인 데이터를 join한다
//mails.receiverEmail 은 전달받은 {email}과 같고
//reserved_at 이 > 현재날짜보다 큰 경우 (2021-12-31 > 2021-11-18)
//받은편지함과 도착예정편지함의 개수 count
const sql4_2 = `select COUNT(id) AS count from mails where receiverEmail = "${email}" and date(reserved_at) <= date_format(now(), '%Y%m%d')`
//get/mail/receive/:mailsid
//메일클릭 시 읽음으로 update
const sql5 = `update mails set isRead = 1 where mails.id =?`
// mails.id 조건으로 한개의 메일의 정보 받아오기
const sql6 = `select mails.id, mails.writerEmail, mails.receiverEmail, mails.title, mails.content, mails.reserved_at, mails.created_at, users.name, users.email
from mails
left join users
ON mails.writerEmail = users.email
where mails.id = ?`
// patch/mail/receive
// 읽기 가능한 mail 삭제
const sql7 = `update mails set receiverEmail = ? where mails.id = ?;`
const params7 = [`${receiverEmail}(삭제)`, id]
이전에 프로젝트를 진행하였을 때에는 백엔드와 프론트엔드를 나누어서 진행하였어서 쿼리문을 작성하기보단 필요한부분만 수정하였는데
백지상태에서 쿼리문을 작성하니 자세한 데이터가 필요하게 되니까
쿼리문이 조금 복잡하게 느껴졌다.
하지만 이전에 배웠던 내용들이였어서 금방 작성할 수 있게 되었고
헷갈렸던 부분들을 추가적으로 다시 되짚어보면서 공부에 많은 도움이 되었다
다음 프로젝트는 프론트엔드로 맡아서 진행하게 되겠지만
이후에 혹여 쿼리문을 작성하게 될 수도있으니 찾아볼 수 있도록 벨로그에 정리해놓았다
Author And Source
이 문제에 관하여([Server] 기능 별 mysql 쿼리 문 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sssssssssy/Server-쿼리-문-작성저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)