🛒【SQL】カート機能を実装する時に知っておきたいJOINとcart_idの扱い方
🌀 はじめに
ECサイトなどでよく使われる「カート機能」には、
cart
テーブルとproduct
テーブルのJOINが欠かせません。
今回の記事では、以下のポイントについてまとめます:
-
JOIN
の基本構造 -
cart_id
やuser_id
によるデータの絵切り方 - 商品タイプ数のカウント方法
- よくある落とし穴と改善方法
📅 カートと商品テーブルのJOIN基本形
SELECT
A.product_id,
A.name,
A.price,
B.quantity
FROM cart AS B
INNER JOIN product AS A ON A.product_id = B.product_id
WHERE B.user_id = :user_id;
このクエリで特定ユーザーのカート内商品の詳細情報を取得可能。
❗ JOINするだけでは「どのカートか」は分からない
例えば以下のようなケースでは、明確に条件を指定しないと不正確な結果になります。
🔍 カートの絵切り方一覧
クエリの目的 | 必要なWHERE条件 |
---|---|
ログイン中ユーザーのカート全件 | WHERE user_id = :user_id |
単品購入(注文確認) | WHERE cart_id = :cart_id |
チェック済アイテムのみ | WHERE user_id = :user_id AND choose = true |
🧐 商品タイプ数をカウントするには?
商品の種類数(同じ商品が複数あっても一つと数える)を知りたいときはこのサブクエリ:
SELECT COUNT(DISTINCT product_id)
FROM cart
WHERE user_id = :user_id;
💡 よくある落とし穴
WHERE B.product_id = A.product_id
この条件はJOIN
句にすでに含まれているため、冗長です。
正しくはON A.product_id = B.product_id
だけで十分です。
また、cart_idが存在しても条件に入れなければ「どのカートか」特定できません。
✅ 実装のポイントまとめ
-
JOIN
しただけでは「誰の・どのカート」か分からない -
cart_id
やuser_id
を明確にWHERE句に入れるべし - 同じ商品でもオプションが異なると別カートになる可能性あり
🔺 おわりに
注文機能やカート表示はよく使う処理なので、SQLのJOINと条件指定の重要性を理解しておくことがとても大事です。
他にも関連して、以下のようなトピックも順次まとめていく予定です:
- 一括購入機能の処理ロジック
- 選択済アイテムのみの注文処理
- 注文確定後のカート削除フロー
参考になった方はLGTM・フォローよろしくお願いします 🙌