2016-07-03 13 views
2

我々はいくつかのユーザーの種類で構成されたソーシャルネットワークを持っており、私たちは7月の米国の休日4日を祝うために、すべての顧客口座に$ 7.04追加するにお金を追加します。すべてのユーザーのアカウント

私は、次のSQLコマンドを使用している:私はこれを行うとき

UPDATE `database`.`databasename` SET fCreditAmount = fCreditAmount + 7.04 WHERE eUserType = 'C' 

は、しかし、複数回に入金しているようです。だから各顧客に$ 7.04を与えるのではなく、一部の顧客に$ 1000を課すだけである。

これがなぜ発生しているのですか?

当社のバランス 'テーブルの構造は次のとおりです。

iBalanceId (autoincrement) 
iUserId 
eUserType 
eBalType 
fCreditAmount 
fDebitAmount 
dEntryDate 
dValueDate 
vDescritption 
vBalTypeCode 
iRefId 
vRefTypeCode 
iAddedUserId 
eAddedUserType 
vProcessDescription 
eBalanceStatus 
+1

一見して私は90%が、この問題はあなたがデータに期待していなかったことから来ていると確信しています。 'SELECT iUserId、fCreditAmount FROM database.databasename WHERE eUserType = 'C';'の前後に表示してください。 –

答えて

2

それはより多くの情報なしで伝えるのは難しいですが、あなたは、ユーザーの歴史の中ですべてのトランザクションに$ 7.04追加しているように見えます。したがって、各ユーザーは7.04 * numberOfTransactionsのクレジットを得ています。

あなたは所望の量で新しいトランザクション(INSERT)を追加する必要があります。そうすれば、各アカウントは正確に1回だけクレジットを獲得します。

私はあなたの本番データベースでこれをやっていないことを願っています。

+0

はい、まさにこれが起こっています。このコマンドは、ユーザーの履歴のすべてのトランザクションに7.04ドルを追加しています。適切なSQLコマンドは次のようになります。 –

+0

INSERT 'database'.'databasename' SET fCreditAmount = fCreditAmount + 7.04 WHEREあなたは' INSERT INTO'を持っている必要がありますeUserType = 'C' –

+0

@SinCatsだけではなく、 'INSERT'、ノーがあります' WHERE'句を 'INSERT'文に追加します。クエリは 'INSERT INTO databaseName.tableName SET fCreditAmount = 7.04、eUserType = 'C'、someOtherColumn = ...'のようなものになります。必要に応じて他の列名を初期化する必要があります(しかし、ここでは非常に限られた情報に基づいて、それを手助けすることはできません)。 [MySQL INSERT文の構文](http://dev.mysql.com/doc/refman/5.7/en/insert.html)を参照してください。 –

関連する問題