2017-03-05 5 views
0

行を更新しようとしています。存在しない場合は挿入します。しかし、INSERT ON DUPLICATE KEY UPDATEは私が一意の列を使用していないので動作しません。存在する場合に更新する方法または挿入する方法

INSERT INTO table (id, user, date, points) VALUES 
(1, 1, '2017-03-03', 25) 
(2, 1, '2017-03-04', 25) 
(3, 2, '2017-03-03', 100) 
(4, 2, '2017-03-04', 150) 

各ユーザーには、ポイントを取得する毎日の行があります。

MySQLへの単一の呼び出しを使用して、存在または挿入する場合、更新する方法はありますか?

答えて

0

はい。あなたは答えはinsert on duplicate key updateです。あなたはちょうど一意のインデックスが必要になります。

CREATE UNIQUE INDEX unq_table_user_date ON table(user, date); 

次に、あなたが行うことができます:

一切のユニークなインデックスと連動し ON DUPLICATE KEY UPDATE
INSERT INTO table (id, user, date, points) 
    VALUES (1, 1, '2017-03-03', 25), 
      (2, 1, '2017-03-04', 25), 
      (3, 2, '2017-03-03', 100), 
      (4, 2, '2017-03-04', 150) 
    ON DUPLICATE KEY UPDATE points = VALUES(points) + points; 

VALUES(points)構文は、列の新しい値を取得します。

+0

何らかの理由でSETという単語に構文エラーが発生しました。それを削除し、それは魅力のように動作します。 – greg

+0

@集合。 。 。私の指は 'UPDATE'の後に' SET'を書くだけです。私は何が彼らに入るのか分からない。 –

関連する問題