同じテーブルの値に対して数学演算の結果を使ってテーブルセルを更新したいとします。 (表は「日付DESC BY ORDER」の順序で指定されたユーザーIDの値を示している)同じテーブルの値に対して数学演算を行うテーブルを更新する
===================================
DATE | AMOUNT | DIR | AFTER
===================================
02-07-17 | 8 | 1 | 50
01-07-17 | 3 | 0 | 42
28-06-17 | 3 | 0 | 45
14-11-15 | 8 | 1 | 0
24-06-15 | 3 | 0 | 0
22-05-15 | 3 | 0 | 0
===================================
最初の列は、操作の日付です:あなたは私のテーブルを見ることができます下に(これは、指定したユーザーIDの結果があります)。第2列(AMOUNTと呼ばれる)は、指定されたユーザーのアカウントに与えられたポイントの値です(この列にはUNSIGNED属性があり、負の値を取ることはできません)。第3列(DIRと呼ばれる)は、操作方向のバイナリ値です(0 = 1からの距離)。最後の列(AFTERと呼ばれます)は、各操作後の現在の点の値を示します。これは、6月28日にユーザーが45ポイントを持っていたことを示しています。 7月1日に3ポイントを失い、その日のAFTER値は42に設定されました(45-3 = 42)。 7月2日、彼は8ポイントを獲得し、経常収支は50(42 + 8 = 50)です。
あなたが見ることができるように、列の後の最初の3行は値を持っている - 私は一年前に作成したスクリプトは、今年6月1日までは、これらの値を保存していなかったためである(と呼ばれるも、何の列はありませんでしたアフター)。 6月1日以降、これらの値をDBに保存する必要がありますが、これは機能していますが、以前のレコード(変更前)は2017年6月1日以前の操作後に正しい値を持っていません)。だから私は、すべての "ポイント後"の値をすべてのユーザーに正しく維持するために、いくつかのPHP + mysqlコード(ユーザーごとに一度 "同期ポイント"オプションとして手動で実行される)を使用してテーブルを更新する必要があります。
私は私がする必要があると思う:
1に/値の後からの追加やsubstract量は(DIRに依存)
2.、最新の(日付別)量と、指定されたユーザIDの値の後を取得、
AFTERの新しい値で 3.更新2NDのROW(そこに格納された値があるが、それは同じでなければなりませんよう、それは上書きすることができます)、
4. 2列目の金額を取得し、AFTER、
5.追加したり、 AFTER、
7らの新しい値に/値の後から(DIRに依存する)substract AMOUNT、
6アップデート3RDのROW c ... etc ...(最後のレコードが更新されるまで、すべてループしてください)。
正しく動作するように、正しいMySQLクエリまたはクエリを教えてください。
あなたはフォーマット – rtfm
「最後の(日付別)金額を取得する」を修正する必要があります。私は日付が表示されません。 –
はい、本当に残念です。編集のためにゴードンに感謝します。 – Vogelek23