티스토리 뷰
도서 전체 조회 (카테고리, 신간 옵션)
const books = (req, res) => {
let categoryId = req.query.categoryid;
let isNew = req.query.isnew;
let sql = "SELECT * FROM books;"; // 전체 도서 조회
let values = [];
if (categoryId && isNew) {
// 카테고리별 신간 도서 조회
sql = `SELECT * FROM books WHERE category_id = ? AND
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();`;
values = [categoryId];
} else if (categoryId) {
// 카테고리별 조회
sql = "SELECT * FROM books WHERE category_id = ?";
values = [categoryId];
} else if (isNew) {
// 신간 조회
sql = `SELECT * FROM books WHERE
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();`;
}
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
신간 조회 SQL 설명
pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();
- BETWEEN 'A' AND 'B'는 A와 B 사이를 뜻함
- DATE_SUB('A', INTERVAL 1 MONTH)는 A로부터 1달 전을 뜻함
- 따라서 위 쿼리는 "오늘로부터 1달 전 ~ 오늘 사이의 출간일을 가진 도서"를 조회하는 의미이다.
예제 요청
- 전체 도서 조회
- 카테고리가 1인 도서 조회
- 카테고리가 1이고 신간인 도서 조회
개별 도서 조회
const bookDetail = (req, res) => {
let { id } = req.params;
id = parseInt(id);
const sql = `SELECT * FROM books LEFT JOIN categories
ON books.category_id = categories.id WHERE books.id = ?;`;
conn.query(sql, [id], (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
if (results[0]) {
return res.status(StatusCodes.OK).json(results[0]);
} else {
return res.status(StatusCodes.NOT_FOUND).end();
}
});
};
