- ベストアンサー
PHP+SQL在庫集計で在庫の累計がうまくできません(ソース)
▽ソースはこんな感じです。(商品アの在庫表の場合) //まず、横軸に1~月最終日までの日付を入れる(ここはOK) $da = 1; $da2 = $date_of_month; for($i=$da; $i<=$da2; $i++){ //データベースの在庫数を抽出、日付順に並べる //データには、それぞれidを振ってありそれをキーにしています $query="SELECT * FROM zaiko WHERE path = '商品(ア)' and date='$year-$month-$i' order by date"; $result = pg_exec($pg, $query); $在庫数 = pg_result($result, 0, 6); $id = pg_result($result, 0, 0); //前日の在庫数を出す //次の行で今日-1で前日 $i2 = $i-1; $query="SELECT * FROM zaiko WHERE path = '商品A' and date='$year-$month-$i2' order by date"; $result = pg_exec($pg, $query); //以上を元に累計を計算 $仕入れ数(A) = pg_result($result, 0, 4); $前日在庫数(B2) = pg_result($result, 0, 6); $在庫数(B) = $前日在庫数(C2)+$仕入れ数-$売れた数; $sql="UPDATE zaiko SET pnumber='$pnumber' WHERE id='$id' "; $result=pg_exec($pg, $sql); if (!$result){ echo "処理に失敗しました"; pg_close($pg); exit; } echo "<td width=40 align=right bgcolor=#FFFFFF>$在庫数(C)</td>"; } これでやると、1度目はうまく計算&表示されるのですが、 ページをリロードしたりすると、 累計数が変わってしまいます。 1度目の計算で表示された最終日の在庫数が、 1日の在庫数に入ってしまうようにも見えますが、 どういう仕組みで、変わってしまうのかわからないのです。 どうぞよろしくお願いいたします。 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=485588
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 1度目の計算で表示された最終日の在庫数が、 > 1日の在庫数に入ってしまうようにも見えますが、 おっしゃるとおり、ただ単におなじクエリを2度出しているんじゃないですか? ページがリロードされれば、当然そこへ書かれているプログラムがサイド実行されます。 こういうことを避けるために、 1.クエリするSQL文をいったんセッションに登録する。 2.クエリが実行されたら(ページが開いたら)そのセッションを破棄する。 これで大丈夫だと思います。 # 試してないので悪しからず
その他の回答 (1)
- mirurin
- ベストアンサー率43% (48/111)
ソースが細切れなのでよくわかりませんが、 > $sql="UPDATE zaiko SET pnumber='$pnumber' WHERE id='$id' "; > $result=pg_exec($pg, $sql); は何をしているのですか? ここで在庫テーブルを更新しているからかなぁと思いましたが...
補足
mirurinさん、kusukusuさん、ご回答大変ありがとうございます。 昨日から早速ご指摘を参考に修正作業に入っています。 うまく進展できたら、すぐご報告させていただきます。