0

次のような発言があります。

UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

そして、テーブルを次のように更新したい:

MATHEMATICS | 100 |  1
PHYSICS     | 75  |  2

それ以外の

PHYSICS     | 75  | 1

「PHYSICS」条件が重複している理由は、この情報を別の関数から取得しているためです。そして、他の関数が PHYSICS 2 時間を通過した場合、PHYSICS ポイントを 2 つインクリメントできるかどうかを知りたいです。

UPDATE を 3 回呼び出す代わりに、1 回の接続でこれを行う方法はありますか。

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS' AND myGrade = '100'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'
UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'PHYSICS' AND myGrade = '75'
4

1 に答える 1

2

テーブルに UPDATE を作成すると、各行は 1 回のみ取得されます。したがって、物理演算の 2 つの更新は生成されません...

    UPDATE `MyTable` 
SET point = point + 1 
WHERE (mySubject = 'MATHEMATICS' AND myGrade = '100') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75') OR 
      (mySubject = 'PHYSICS' AND myGrade = '75')

このクエリは、SQL .. UPDATE for me all rows in MyTable WHERE (ケース a) または (ケース b) または (ケース c)

SQLは数学を取り、場合によってはOKで更新されます。次に、物理学が必要で、ケース b では OK で更新され、SQL FINISH はテーブルに行がないため..

あなたの仕事をするには、2つの別々の更新を行う必要があります..

UPDATE `MyTable` SET point = point + 1 WHERE mySubject = 'MATHEMATICS';
UPDATE `MyTable` SET point = point + 2 WHERE mySubject = 'PHYSICS';

または、CASEを使用できます

UPDATE  `MyTable` SET point = 
        CASE
        WHEN mySubject = 'MATHEMATICS' THEN
                (point+1)
        WHEN mySubject = 'PHYSICS' THEN
                (point+2)
        END
于 2012-10-25T04:44:05.113 に答える