0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🛒【SQL】カート機能を実装する時に知っておきたいJOINとcart_idの扱い方

Posted at

🛒【SQL】カート機能を実装する時に知っておきたいJOINとcart_idの扱い方

🌀 はじめに

ECサイトなどでよく使われる「カート機能」には、
cartテーブルとproductテーブルのJOINが欠かせません。

今回の記事では、以下のポイントについてまとめます:

  • JOINの基本構造
  • cart_iduser_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_iduser_idを明確にWHERE句に入れるべし
  • 同じ商品でもオプションが異なると別カートになる可能性あり

🔺 おわりに

注文機能やカート表示はよく使う処理なので、SQLのJOINと条件指定の重要性を理解しておくことがとても大事です。

他にも関連して、以下のようなトピックも順次まとめていく予定です:

  • 一括購入機能の処理ロジック
  • 選択済アイテムのみの注文処理
  • 注文確定後のカート削除フロー

参考になった方はLGTM・フォローよろしくお願いします 🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?