2011-06-28 9 views
0

タグをテーブルに挿入するinsert文があります。各タグには、一意のid(参照用)、vid_id(動画との一致用)、name(例:タグ1)があります。フィールドのサブセットを照合して重複するエントリを防止します。

重複するエントリは、挿入されているものと同じで、vid_idnameという既存のエントリがあるとみなされます。

2/3フィールドに一致する重複エントリの挿入を停止するにはどうすればよいですか?

$sql="INSERT into tags (id,vid_id,name) VALUES (?,?,?)"; 
$stmt16 = $conn->prepare($sql); 
$result=$stmt16->execute(array($id,$vid_id,$tag)); 

答えて

2

あなただけvid_idnameで構成ユニークcontraintを作成する必要があり、あなたはすべてのセットです!

これは、あなたがそれを行う方法です。

alter table tags add unique (vid_id, name); 

一度作成は、あなたのユニークな制約が与えられた独自の定義(関与フィールド)重複行を生成する値の挿入を禁止します。

これは更新にも当てはまります(ただし、それはありますか?):レコードを更新しようとすると、複製によって複製が生成されると、一意制約によってブロックされます。

+0

重複してもどちらの値も存在しないようにしますか?私は、両方の値が 'id:123、name:tag1'と一致する場合、2回は出現しないようにしたいだけです。 'id:123、name:tag2'が' id:123、name:tag1'と共存するかどうかは気にしません。 – Scarface

+0

しかし、あなたはちょうど言ったことはありません "重複したエントリは、何かが挿入されているものと同じvid_idと名前を持つ既存のエントリを持つと見なされます" –

+0

定義されている方法によって、独自の制約がニーズに合っています。たぶん、現在の値のテーブルを投稿すると、私たちはこの問題をもっとよく理解することができました... –

1

これらの2つの列に一意のインデックスを作成します。

関連する問題