📚요약
지난 시간 장바구니 API를 추가했습니다. 이번 시간에는 주문 API의 결제하기(주문하기)를 어떻게 해야 할지 고민해 보고 일부 구현해 보겠습니다.
📖SQL
📄LAST_INSERT_ID()
함수의 이름과 같이 마지막으로 insert한 id를 불러오는 함수입니다.
SELECT LAST_INSERT_ID();
하지만 해당 함수에는 여러 단점이 존재합니다.
- 여러 번 insert한 결과와 bulk insert한 결과가 다르게 나온다.
- 서버 연결 후 별도의 insert가 없다면 0이 나온다.
- 가장 마지막에 insert한 테이블의 auto_increment된 값을 불러온다.
📄MAX(), MIN()
자주 볼 수 있는 함수 이름으로 가장 큰 값을 반환하는 함수(MAX)와 가장 작은 값을 반환하는 함수(MIN)입니다.
SELECT MAX(칼럼명) FROM table;
SELECT MIN(칼럼명) FROM table;
📖주문 API
📄구현



📑주문하기 구현
주문하기 요청은 지금까지 요청들과 다르게 여러 요청을 처리해야 합니다.
1. 테이블에 insert하는 순서
delivery → orders → orderedBook
왜냐하면 orders에는 delivery의 id가 필요하고, orderedBook에는 orders의 id가 필요하기 때문입니다.
2. 주문에 성공한 장바구니 목록 삭제하기
또한 지금까지 INSERT문과 다르게 여러 가지를 입력해야 한다는 차이점이 있습니다. 이는 Node.js에서 제공해 주는 문법을 활용하면 편하게 해결할 수 있습니다.
sql = `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ?`;
values = [];
basketItems.forEach((item) => {
values.push([2, item.bookId, item.quantity]);
});
mariadb.query(sql, [values], (err, results) => {
...
});
기존 값만 들어갔던 values에 배열을 값으로 넣어서 사용하는 방법인데 이때 주의할 점은 values를 []로 감싸서 넣어줘야 동작한다는 점입니다.
🍯tip! 추가적으로 INSERT문을 활용할 때 칼럼이 많아질수록 점점 입력이 복잡해진다. 이때 mariadb에서만 가능한 방법인데, `INSERT INTO 테이블 SET ?`을 활용하면 객체를 이용해 값을 편하게 입력할 수 있다. 자세한 코드는 하단 코드를 참고하면 된다.
// 기존 사용 방법
sql = `INSERT INTO orders (delivery_id, book_title, total_price, total_quantity, user_id)
VALUES (?)`;
values = [deliveryId, firstBookTitle, totalPrice, totalQuantity, userId];
// 새로운 사용 방법
sql = `INSERT INTO orders SET ?`;
values = {
delivery_id: deliveryId,
book_title: firstBookTitle,
total_price: totalPrice,
total_quantity: totalQuantity,
user_id: userId,
};
mariadb.query(sql, values, (err, results) => {
...
});
다음 시간에 이어서 해당 쿼리문을 연속으로 동작하게 하는 방법을 구현해 보겠습니다. 자세한 코드는 Github에서 확인할 수 있습니다.
ProgrammersSchool/PROJECT-BOOKSHOP at main · nulzi/ProgrammersSchool
프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.
github.com
❔▪❓
Q. orderedBook 테이블에 id(PK)가 필요한가?
A1. 현재로서는 없어도 문제는 없어 보인다. 주문을 취소할 때 id(PK)가 없으면 같은 주문으로 인식돼서 값이 랜덤 하게 삭제되거나 다 같이 삭제될 수 있다.
A2. 혹시.. GUI 사용하려고?
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
MYSQL.LAST_INSERT_ID(), jdaemanv2, 2024.05.29
다중쿼리 처리 방법, sql에 파라미터 매핑하는 다양한 방법, 준스파파IT개발, 2024.05.29
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 데브코스 스터디(알고리즘, 코테) 11회차 (0) | 2024.05.30 |
|---|---|
| 프로그래머스 데브코스 39일차 with. TS 웹 풀스택 (0) | 2024.05.30 |
| 프로그래머스 데브코스 37일차 with. TS 웹 풀스택 (0) | 2024.05.28 |
| 프로그래머스 데브코스 8주차 회고 with. TS 웹 풀스택 (0) | 2024.05.27 |
| 프로그래머스 데브코스 36일차 with. TS 웹 풀스택 (0) | 2024.05.27 |