티스토리 뷰

카테고리 없음

8주차 파트4

파이썬 초보 파이리 2025. 3. 18. 00:55

도서 전체 조회 (카테고리, 신간 옵션)

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();
    }
  });
};

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함