- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLのUPDATEする数値の設定 PHP)
PHPでMYSQLのデータをアクセスごとに増やす方法
このQ&Aのポイント
- PHPでMYSQLのデータをアクセスするたびに値を増やすプログラムを書いていますが、うまくいきません。
- デフォルト値を0に設定してアクセスするごとに値を1ずつ増やすことを予想していましたが、最初のアクセスで3になり、その後は1ずつ増え続けます。
- UPDATE文よりも他の方法を使用すべきでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
update以外でどうかこうと思ってるのかな? 普通というか一般的には update wp_usermeta set meta_value = meta_value + 1 where umeta_id='150'; これ1本のSQLで処理するんでないかな? いちいちセレクトするなら、レコードロックしないと同時アクセス時に数値がおかしくなるよ。
その他の回答 (1)
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
回答No.2
>ブラウジング中に他のタブやブラウザで開くともちろんですがMysqlの数値が増えていくと言うことはレコードロックなるものが必要ということですね。 違います。それはまた別です。 何も考慮していないんだからアクセスごとにカウントアップされるのは当たり前です。 >記載頂いたSQLでも同様の結果が得られましたが、同様にタブ操作でどんどん増えていきますので同じ状態ですね。レコードロックを調べてみます。 ありがとうございました。 これも上記と同じで当たり前です。 レコードのロックが必要と言ったのは、 1.取得 2.カウントアップ 3.更新 というプロセスがあります。 Aのアクセスで1.2.まで進んだ状態で Bがアクセスして1.をした瞬間の値はAのアクセスと同じになってしまいます。 あとから接続されたのに同じ値で書き換えますのでこのアクセスはカウントされないことになります。 という原理です。 タブを開いてうんぬんは、同一IPアドレスだったら○分間はカウント処理を実行しないとかそういう処理になり、レコードロックとは関連しません。
補足
ブラウジング中に他のタブやブラウザで開くともちろんですがMysqlの数値が増えていくと言うことはレコードロックなるものが必要ということですね。 記載頂いたSQLでも同様の結果が得られましたが、同様にタブ操作でどんどん増えていきますので同じ状態ですね。レコードロックを調べてみます。 ありがとうございました。