2016-06-27 16 views
1

とDUPLICATE KEY UPDATE ON私は、次の列でこのテーブルを持っている:INSERT INTOは...複数のキー

id 
userid 
app 
field 
value 

列「フィールド」と「アプリ」「USERID」に合わせてユニークです。そのため、ユーザーは常に同じ「アプリ」と「フィールド」の値を持つ行が1つしかありません。しかし、彼らは同じ "単に" "同じ"または単に "フィールド"の値が同じ値を持つ行を複数持っています。同じ "userid"を持つ複数の行が常に存在します。

私はどのようにして複数のキーを挿入したり更新したりできるのか分かりません。他の "userid"行や別の "app"や "field"の値を持つ他の行に値を使うことができるので、mysqlではそれらを一意に設定することはできません。

これは可能か、「ユーザーID」、「アプリ」、「フィールド」が挿入または更新したい場所に一致する行が存在するかどうかをまずチェックする必要があります。

また、1つのクエリで1つ以上の行を挿入/更新しようとしています。

update mytable set col1 = @value where (field = @v and [email protected] and userid = @v2) 

あなたが必要なフィールドが接合されていることを確認してください「と」と全てが括弧で囲まれています。

+3

あなたはユニーク –

+0

目的として(ユーザーID、アプリ、フィールド)を作成カントMySQLがそれに違反する挿入物を拒否するようになっています。 –

+0

要するに... "userid"、 "app"、 "field"の列を挿入したいのですが、既に同じ値を持つ3行の行がある場合は、その行を更新します。それらのうちの1つが今や別の行マッコを意味するならば、それはそれを挿入するでしょう。 – PixelPaul

答えて

1

これは私のために働いていたものです...

INSERT INTO table (field, app, userid, value) 
      VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4) 
      ON DUPLICATE KEY UPDATE value=VALUES(value); 

これは、単一のクエリで複数の行をやって作品

+0

_And_は、3列 'UNIQUE'キーを持っています。 –

0

あなたは次の3つのフィールドをしたい場合は、この

update mytable set col1 = @value where (field = @v and [email protected]) 

を行うことができます

+0

申し訳ありませんが、行が挿入されていない場合はどうやって挿入しますか? – PixelPaul

+0

これは更新用です。あなたが選択する必要があります:select * from mytable where(フィールド= @ vとapp = @ v1とuserid = @ v2)..結果が返ってきたら、 ..これは –

3

最初に(user_id, app, field)にユニークなインデックスを作成します。

ALTER TABLE user_settings 
ADD UNIQUE (userid,app,field); 

このようなクエリを使用します。

INSERT INTO user_settings SET 
     -- id = ?, Do not include this -- you don't have the value 
     userid = ?, 
     app=?, 
     field=?, 
     value = ?, 
     ON DUPLICATE KEY UPDATE 
     value = ?; 
+0

私は3列の新しいユニークを作成し、私はちょうどこれを試してみましたが、それは新しいものを作成していない、それはuser_settings INTO INSERT(別のユーザーIDと1を更新し、新たなデータであることを今ウル確認として、通常、他の挿入フィールド、アプリケーション、ユーザーID、値)の値( 'approvaldefaultyes'、 'apdible_servicebar'、1 '1')、( 'emailcustomerdefaultyes'、 'apdible_servicebar'、1 '1') \t \t \t \t DUPLICATE KEY UPDATE ON \t \t \t \t値= VALUES(値) – PixelPaul

+0

回答で上記のクエリを使用してみてください(疑問符を値に置き換えてください) –

+0

残念ながら貼り付けられています。これはIDですが、 o複数のSET(可能ならば? )......、= 'はapprovaldefaultyes'(user_settingsセットに、アプリ= 'apdible_servicebar' のフィールドを挿入ユーザーID = 1、値= '1')、(フィールド= 'emailcustomerdefaultyes'、アプリ= 'apdible_servicebar'、ユーザーID = soory DUPLICATE KEY UPDATE \t \t \t \t値= valuedead – PixelPaul