アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校の授業で困っていることがあります。PHP+MySQLでショッピングサイトを構築しているのですが、カートの在庫処理の部分で疑問が発生しました。
私たちのショッピングサイトは、カートに商品を追加した時点で、DBの在庫テーブルの販売数を増やし、在庫数に即時に反映させたいと考えています。
しかし、ブラウザを閉じた時やセッションタイムアウト時、ログアウト時に確定していないカートの商品については販売数を元に戻したいのです。
ログアウト時は明示的に行えると思うのですが、セッションタイムアウト時、ブラウザを閉じた時の処理はどのようにすればいいのですか?
そのようなイベントを取得するメソッドや方法はないのでしょうか?
参考サイトや方法を教えてください!

A 回答 (4件)

カートのデータ用のテーブルを用意します。


主キーはセッションIDにするか、ユニークなカートIDを発行し商品データと一緒に保存します。
セッションにはカートIDのみ保持します。

そしてセッションは切れても在庫は戻らないので、未購入のまま放置されてるカートを開放するプログラムを実装します。

ユーザーのアクセス毎にやってると負荷が気になるかもしれませんがそこはサジ加減で決めてください。
if(mt_rand(1,10) === 10){
//解放処理行うとか。
}
ただあまり稀にしてしまうと、解放対象がいつまでも残りユーザーが買えないのでなるべくユーザーのアクセス毎に実行したほうがいいです。

カート解放のプログラムはカートを生成してxx分以上経過していたら削除する、最後に商品
を追加してからxx分以上経過していたら削除する等ルールを決め実装します。
もちろん削除前に在庫は戻してください。
カートが解放されたことをユーザーにアナウンスしたい場合は商品データを削除後、解放しましたflagを立てるやセッションにメッセージを持つ、リダイレクトさせるなどの実装があります。
解放プログラムはプログラムの前のほうで実行するようにしてください。理由はフローチャートでも書けばわかると思います。


ちなみにカートに入れた段階で販売数を増やすのは設計として良いと思えません(売上計算上的な意味で)
たとえばスーパーでカートに入れてもそれは販売したことにはなりませんよね?またスーパーが持っている在庫が減るわけでもないです。
お客さんが確保できる在庫が減るだけですね。
ということで、販売用在庫・実在庫・販売数は別の概念で考えましょう。
    • good
    • 0
この回答へのお礼

助かりました。参考にさせて頂きます。
ありがとうございました。

お礼日時:2010/06/30 12:33

ただの参考意見ですので、聞き流してください。



中身の事は知らないので、実際の動作を見ての判断ですが、楽天のショッピングカートは注文を送信した時点で、在庫から数量が減る仕組みみたいです。

ぶっちゃけ これだと 同じ時間にカートに入れても、注文が一歩遅いと在庫切れになってしまってる人もいたりするわけですが。
なので、注文時の楽天の自動返信メールには、「ショップからの注文確定のメールが来るまで振り込まないでください」みたいな事が書かれています。

楽天でも採用している この方式が 実はベストなやり方なのかもしれません。
    • good
    • 0

販売数を増やしたタイミングをDBに保存しておき、たとえば30分経っても販売が確定していなかったら元に戻すプログラムをcronで定期的に実行する、というのはどうでしょう。

この回答への補足

「cron php」で検索しました。データベースのバックアップ等自動的にして欲しい時に使うもののようですが、1つ疑問があります。
Aさんが12:00に買い物かごに商品をいれて此処で言う販売数を減らしたとします。そのタイミングをDBに保存しておきます。
その後、12:30にBさんが買い物かごに商品をいれて、販売数を減らしたとします。
そして、Aさんが追加後30分を経過し、12:00の状態にもどすと、
Bさんの販売数は反映されなくなってしまうではないでしょうか?
私の勘違いだったらすいません・・

補足日時:2010/06/29 13:04
    • good
    • 0

>カートに商品を追加した時点で、DBの在庫テーブルの販売数を増やし



在庫数と受注数を別にもてばいいです。
なお注文は販売ではありません。販売が確定するまで販売数は増やしてはいけません。
受注数を増やし、その結果、余裕数が1減るという処理になります。
実際には受注を販売に変更するためには、受注引当、在庫引落、売上確定処理が必要になります。

この回答への補足

質問に書いた販売数というのは回答者さんがおっしゃっている受注数のことです。
回答者さんの言われている通り、在庫数と受注数を持っていて、カートに入れると受注数を増やすしくみです。
在庫数-受注数で商品ページの在庫数を表示するようにしています。

補足日時:2010/06/29 12:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!