오늘 배운 내용 📚
- SQL 시간범위를 구해 신간 도서 조회
- 페이지 별로 도서 정보 전달
추가 정리 내용 📑
- 정렬 추가 작업
- count를 이용하여 좋아요 개수 표기
어제에 이어서 도서 조회 API를 작성을 하였는데요. 강사님이 진행한 내용뿐만 아니라 도서 정렬 기능도 추가하였습니다. 또한 좋아요 테이블에 해당 도서번호가 존재한다면 count 하여 likes 칼럼을 생성을 하였고, 중첩이 되지 않게 GROUP BY를 사용하였습니다. 그리고 SQL의 중복을 어떻게 해야 줄일 수 있을까 하다가 기본적으로 다 들어가는 코드는 변수에 담아두고 각 조건에 맞춰서 +=를 이용하여 SQL을 추가하는 방식으로 진행하였습니다.
이전에 작성해 본 코드들과 비교를 해볼 수 있었습니다
// 이전 코드
const listNum = (page * 5) - 5; // offset
const pageListSql = `SELECT boardNum, boardTitle, author, view, regDate from ${path}
order by boardNum desc LIMIT 5 OFFSET ${listNum}`
// 현재 코드
let values = [];
let allSelectSql = `SELECT b.idx, b.title, b.category_id, bi.path as main_image, b.summary,
b.author, b.price, b.pubDate, bl.likes FROM books as b LEFT
JOIN (SELECT book_id, path, main FROM book_images WHERE main = 1) as bi
ON b.idx = bi.book_id left
join (select book_id ,count(*) as likes from likes group by book_id) as bl
ON b.idx = bl.book_id`;
const offset = (pages - 1) * limit;
if (pages && limit) {
allSelectSql += ` LIMIT ? OFFSET ?`;
values.push(limit, offset);
}
첫 번째로 offset의 변화가 있었습니다. 그때나 지금이나 똑같은 데이터 값을 보여줘야 했는데요, 수식이 바뀐 것을 확인할 수 있습니다. 기존에는 page만 받고 limit 수를 받지 않아 백 단에서 limit 수를 설정해 줄 수 있었는데요 이번에는 page와 limit를 받기 때문에 수식에 변화가 생긴 것 같습니다.
또 SQL작성도 조금 더 복잡해진 것 같습니다. 특히 이번에는 FROM 안에 SELECT를 이용해 보았는데요 처음에 FROM이 아니라 SELECT 안에 SELECT를 작성하여 오류가 발생하기도 했습니다.
기존에 혼자 작업하던 프로젝트와 비교해 보니 여러 테이블에서 데이터를 받아와 JOIN을 하고, 그로 인해서 어떻게 더 표현할지에 대해 생각을 하게 된 것 같습니다.
'프로그래머스 데브코스 > TIL' 카테고리의 다른 글
[Day 40] 웹 풀사이클 데브코스 TIL (0) | 2024.01.08 |
---|---|
[Day 39] 웹 풀사이클 데브코스 TIL (0) | 2024.01.05 |
[Day 37] 웹 풀사이클 데브코스 TIL (0) | 2024.01.03 |
[Day 35~36] 웹 풀사이클 데브코스 TIL (0) | 2024.01.02 |
[Day 34] 웹 풀사이클 데브코스 TIL (0) | 2023.12.29 |