2016-08-09 16 views
0

上で使用して私は、データベース内の非常に単純なテーブル構造があります。ユーザーIDとグループIDにUNIQUEキーでINSERTは、DELETE - DUPLICATE KEY

ID (Unique), userid, groupid 

を - あなたは2と同じを持って傾けるようにします。たとえば:

ID userid groupid 
1  86  5 
2  86  6 

は可能ですが、:可能イマイチ

ID userid groupid 
1  86  5 
2  86  5 

これはすべて問題なく動作します。私がしようとしているのは、行をINSERTしようとしていて、それが重複のために失敗した場合は、その行を削除します。私のコードは単純です:

$group_query = $database->prepare("INSERT INTO users_groups (userid,groupid) VALUES (?,?) ON DUPLICATE KEY DELETE FROM users_groups WHERE userid=? AND groupid=?"); 
$group_query->bind_param("iiii", $user_id, $group_id, $user_id, $group_id); 

私はこの簡単な理由はありません。すべての変数は整数に設定されています。それらはすべて実際の数値です(チェックされています)。構文はすべてうまく見えます。私が持っている唯一の結論は、それが有効なクエリではないことです - しかし、なぜそれが有効なクエリではないのか分かりません。

ありがとうございます!

あなたが最初のユーザーIDとグループIDに基づいて行を選択するために、SELECT文を使用することができます
+0

はIODKDについて聞いたことがありません。あなたはあなたが選んだ動詞を記入するだけではありません。 – Drew

+0

私はこのページでIODKDの検索を実行し、あなたが書いたものだけを思いついた。私はまた、IODKDについて聞いたことがありません:) –

+0

私はまた、IODKEMCF(duplicate keyのメールに私のcsvファイルを挿入)を聞いたことがありません – Drew

答えて

1

SELECT *FROM table where userid = '86' AND groupid = '5' 

それが存在する場合は、行を返した後、0より大きいか

if($result_array > 0){ 
// use delete statement 
}else{ 
// user insert statement 
} 
場合は、配列をチェックします
+0

ありがとうございます - 私は複数のクエリを避けようとしていましたが、それは最も単純な解決策のように思えます:( –

+0

サーバー上でパフォーマンスが向上する可能性があるため、適切な解決策である可能性があります –

0

働か-1:チェックすることにより

を挿入し、新しい行同じレコードを挿入重複行

select文を通じて

INSERT INTO users_groups (userid,groupid) SELECT * FROM (SELECT 5,86) AS tmp WHERE NOT EXISTS (SELECT `groupid` FROM users_groups WHERE userid =5 and groupid=86); 

出力:0行が挿入されました。

挿入実際の行

INSERT INTO users_groups (userid,groupid) SELECT * FROM (SELECT 6,86) AS tmp WHERE NOT EXISTS (SELECT `groupid` FROM users_groups WHERE userid =6 and groupid=86); 

出力:挿入された1行。

働か-2:

挿入新しい行が通じ

REPLACE INTO users_groups (`userid`,`groupid`) VALUES (?,?); 

注意を置き換える:除いて、正確にINSERTのような作品を交換することであれば テーブル内の古い行PRIMARY KEYまたはUNIQUEインデックス の新しい行と同じ値を持つ場合、新しい行が削除される前に古い行が削除されます。挿入された。

働か-3:

あなたが挿入しようとしている場合、それは文句を言わない、新しいレコードを挿入することができ、グループIDのためのユーザーID

ALTER TABLE `users_groups` ADD UNIQUE (
`userid` , 
`groupid` 
); 

をユニークインデックスを追加し、それが表示されます次のエラー

1062 - キー 'groupid'の重複エントリ'86 -5 '

関連する問題