2012-02-03 10 views
0

テーブル内の重複したコピーを防止しようとしています。私は行全体が別の行のコピーである重複を探しています。行の1つの要素が別の行の一部のコピーである場合、それは問題ではありません。たとえば、名前が複数のフィールドで繰り返されている場合はOKですが、追加の各フィールドが別のエントリと同じ場合は、プログラムがそのエントリを追加しないようにしたいと考えています。ここで私は試してみるつもりだったされているもの:データベーステーブルにデータをアップロードして重複するエントリを防ぐにはどうすればよいですか?

if(mysql_num_rows(mysql_query("SELECT * FROM table WHERE field1 = '$field1',field2 =  '$field2', field3 = '$field3',field4 = '$field4'"))){ 
// send some message if entry is within table 
} else { 
// add unique entry to the table if field is not there 
} 

は、上記のコードの検索とは、すべての4つの値は、必ずしも必要ではないが、各列の各列内にあるか、すべての4つの値は、各列のどこかに位置しているかどうかをチェックしますか?

答えて

1

ユニークキー追加:データベースに一つだけのクエリを持っています

  • :その方法

    INSERT IGNORE INTO table ...; 
    

    ignoreキーワードで挿入

    ALTER TABLE table ADD UNIQUE(field1); 
    

    そして使用よりを

  • エラーはトリガーされません
  • 何二枚舌は(データベース保証)データベースに発生しません

これは素敵な読書です:テーブルはフィールド1と同じ名前を持っていたすべてのエントリを追加しないようにINSERT IGNORE or INSERT WHERE NOT IN

+0

は、それを作るのでしょうか?他のフィールドも同じ行内にあるように上記を変更できますか? – Stagleton

+0

@Stagleton UNIQUE KEYSについて何を知っていますか?テーブル内でデータが一意であることを保証します。インデックス 'UNIQUE(name)'を作成した場合は、各名前を一度だけ挿入することができます。 'UNIQUE(category_id、product_id)'で作成すると '(1,1)、(1,2)、(2,2)'を挿入できますが、 '(1,1)'を挿入するとエラーが発生します。 'INSERT IGNORE'を使うと、エラーは生成されず、クエリは静かに止まります。あなたは 'ON DUPLICATE'を使うこともできます(私の答えの最後のリンクを見てください)。 – Vyktor

+0

私は十分知らない。私は家に帰るときにそれを試してみる。助けてくれてありがとう。 – Stagleton

関連する問題