서브쿼리를 통해 다양한 조건을 컨트롤하기

ssomae·2024년 10월 8일

DevCourse

목록 보기
29/29

좋아요 DB 설계하기

좋아요 추가 구현

const addLike = (req, res) => {
    const { id } = req.params;
    const { user_id } = req.body;

    let sql = `INSERT INTO likes (user_id, liked_book_id) VALUES (?,?)`;
    let values = [user_id, id];

    conn.query(sql, values,
        (err, results) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }
            return res.status(StatusCodes.OK).json(results);
        }
    )
};

좋아요 삭제 구현 (취소)

const removeLike = (req, res) => {
    const { id } = req.params;
    const { user_id } = req.body;

    let sql = `DELETE FROM likes WHERE user_id = ? AND liked_book_id = ?`;
    let values = [user_id, id];

    conn.query(sql, values,
        (err, results) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }
            return res.status(StatusCodes.OK).json(results);
        }
    )
}

좋아요 개수 세서 books 테이블에 컬럼 추가해서 출력하기

SELECT *,
(SELECT count(*) FROM likes WHERE liked_book_id = books.id) AS likes FROM books;

도서 테이블 전체 조회 + 컬럼 1개 추가하기

SELECT *,AS 새로 추가할 컬럼명
			FROM books;
			
SELECT *,
			(각 행마다 likes 테이블에 liked_book_id로 가지고 있는 행 수) AS likes
			FROM books;
			
SELECT *,
			(SELECT count(*) FROM likes WHERE books.id = liked_book_id) AS likes
			FROM books;

개별 도서 조회 시, 사용자가 좋아요를 헀는지 여부를 포함하기

SELECT EXIST (SELECT * FROM likes WHERE user_id = 1 AND liked_book_id = 3)
const bookDetail = (req, res) => {
    let  book_id = req.params.id;
    let { user_id } = req.body;
    let sql = `SELECT *,
                (SELECT count(*) FROM likes WHERE liked_book_id = books.id) AS likes,
                (SELECT EXISTS (SELECT * FROM likes WHERE user_id = ? AND liked_book_id =?)) AS liked
                FROM books
                LEFT JOIN category
                ON books.category_id = category.category_id
                WHERE books.id =?`;
    let values = [user_id, book_id, book_id];
    conn.query(sql, values,
        (err, results)=> {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }
            if (results[0])
                return res.status(StatusCodes.OK).json(results[0]);
            else
                return res.status(StatusCodes.NOT_FOUND).end();
        }
    )
};
profile
성장해나갈 개발자

0개의 댓글