[Server] 기능 별 mysql 쿼리 문 작성

2주 first-project를 진행하면서 모든 팀원들이 각자 기능을 맡아 풀스택으로 진행하자는 의견이 나와
서버쪽에서 클라이언트에 전달해 줄 자료를 추출하기위해
쿼리문을 작성하였다


  1. 구현해야되는 메일함 (받는메일함)
  • Login 되었을 때 받아온 유저정보에서 email을 이용 해 메일을 조회한다
    조회 한 메일 중 메일도착날짜현재날짜와 비교하여 현재날짜 이전의 메일만 자료를 가져온다
  • Login 되었을 때 받아온 유저정보에서 email을 이용 해 메일을 조회한다
    조회 한 메일 중 메일도착날짜현재날짜와 비교하여 현재날짜 이후의 메일만 자료를 가져온다
  1. 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]

이전에 프로젝트를 진행하였을 때에는 백엔드와 프론트엔드를 나누어서 진행하였어서 쿼리문을 작성하기보단 필요한부분만 수정하였는데
백지상태에서 쿼리문을 작성하니 자세한 데이터가 필요하게 되니까
쿼리문이 조금 복잡하게 느껴졌다.
하지만 이전에 배웠던 내용들이였어서 금방 작성할 수 있게 되었고
헷갈렸던 부분들을 추가적으로 다시 되짚어보면서 공부에 많은 도움이 되었다

다음 프로젝트는 프론트엔드로 맡아서 진행하게 되겠지만
이후에 혹여 쿼리문을 작성하게 될 수도있으니 찾아볼 수 있도록 벨로그에 정리해놓았다

좋은 웹페이지 즐겨찾기