
カートに入れるボタンを押したときに、
・同一ユーザー、同一商品があればカート数量をカウントアップする
・もしなければ、新規カートを追加する
処理を追加したいです。
cartテーブル(ユーザがカートに追加した商品の情報)が
cart_id, user_id, item_id, amount, create_date, update_date
productテーブル(商品情報)が
id, name, price, img, status, create_date, update_date
item_stockテーブル(在庫情報)が
stock_id, item_id, stock, create_date, update_date
になります。
SQL文をどのように記述すればいいですか?
//以下はカートテーブルに入れるときのSQL文です。(他のコードは省略しています。)
$sql = 'INSERT INTO cart(user_id, item_id, amount, create_date, update_date)
VALUES(?, ?, ?, ?, ?)';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(1, $user_id, PDO::PARAM_INT);
$stmt->bindValue(2, $item_id, PDO::PARAM_INT);
$stmt->bindValue(3, 1, PDO::PARAM_INT); //在庫は1にする
$stmt->bindValue(4, $date, PDO::PARAM_STR);
$stmt->bindValue(5, $date, PDO::PARAM_STR);
$stmt->execute();
$msg[] = 'カートに追加しました!';
//以下はproductテーブルからすべて取得するときのSQL文です。
$sql = 'SELECT product.id, name, price, img, status, stock
FROM product
JOIN item_stock
ON product.id = item_stock.stock_id
WHERE status = 1';
// ステータスが1の商品のみを表示する
$stmt = $dbh->prepare($sql);
$stmt->execute();
//レコードを取得する
$rows = $stmt->fetchALL();
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
私なら、user_id と item_id にUNIQUE制約を付けておいて、DUPLICATE(重複)が発生した場合はUPDATEが走るように作るのが楽かな。
https://artisan.hatenablog.com/entry/2017/10/29/ …
検証してませんが、SQLとしては↓こんな雰囲気かと思います。
INSERT INTO cart(user_id, item_id, amount, create_date, update_date)
VALUES(?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
update_date = ?
amount = amount + 1
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
select文のwhere句に配列を入れ...
-
エクセルで最後の文字だけ置き...
-
マイクラPC版のコマンドで効率...
-
入力値と外部キーをINSERTするには
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
URL と行番号の指定
-
”photo id” とは何ぞや?
-
sqlで、600行あるテーブルを100...
-
レコード削除・sqlインジェクシ...
-
SQLサーバから、項目の属性(型...
-
テーブル作成時のカラムについて
-
所有格の意味
-
スクリーンセイバー
-
Yahoo .comの idには年齢制限、...
-
VBA リボンのCheckBox2個をOpt...
-
PL/SQLの変数について
-
差し込み後、元データを変更し...
-
1日に1人がこなせるプログラム...
-
access2003 クエリSQL文に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報
自分は以下のやり方で試してみました。
最初にカートに追加する対象商品がすでにカートに入っているかどうか確認する。
$sql = 'SELECT item_id, amount FROM ec_cart WHERE item_id = ? AND user_id = ?';
……$rows = $stmt->fetchAll();
その後 if(empty($rows)) 〜で
「カートに追加の対象商品がすでにカートに入っていない場合」と「カートに入っている場合」でそれぞれSQL文を作る。
これだとかなり長くなりました。