2012-08-29 13 views
5

可能性の重複:
How to 'insert if not exists' in MySQL?挿入し、ユニークな値

SQLテーブルがあります:

CREATE TABLE IF NOT EXISTS `MyTable` (
    `id` smallint(6) NOT NULL AUTO_INCREMENT, 
    `MyVar` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) 

そして2つのPHPの配列があるarr1[]=array("abc","bcd")arr2[]=array("abc","cde")

ここで、arr1 []の値をSQLテーブルに保存したとしましょう。では、arr2 []の値を同じSQLテーブルに保存する必要があるとしましょう。どのSQL INSERTクエリが "abc"エントリの重複した保存を避けるために書き込む必要がありますか?結果はでなければなりません:

MyTable: 
1 | abc 
2 | bcd 
3 | cde 

ではなく:

MyTable: 
1 | abc 
2 | bcd 
3 | abc 
4 | cde 

UPDATE: たぶんMyTableとは重複したエントリが無視されるように定義された/作成する必要がありますか?

+0

MyVar列に一意の制約を設定します。したがって、すでに存在する値を挿入しようとしても動作しません。 – TRD

+0

http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – matino

+0

'INSERT IGNORE' +残りのクエリ –

答えて

1

MyVarをテーブルにUNIQUEとしてください。このよう

は:

CREATE TABLE IF NOT EXISTS `MyTable` (
    `id` smallint(6) NOT NULL AUTO_INCREMENT, 
    `MyVar` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE INDEX `myvaridx` (`MyVar`) 
); 

か、あなたがテーブルを再作成することができないなら、無駄になるようなタスクのためのSQLを使用して

ALTER TABLE `request` 
ADD UNIQUE INDEX `myvaridx` (`MyVar`) 
6

INSERT IGNORE,REPLACEまたはINSERT ... ON DUPLICATE KEY UPDATEを使用する3つの解決策があります。これをチェックしてくださいarticle

また、メモリがintersect array-sである場合は、そのソリューションが適している場合は、一意の値を挿入することもできます。

0

使用して、それを変更します。

"array_merge"関数を使用して配列をマージし、次に "array_unique"関数を使用して複製を処理することをお勧めします。

次に、データベースに一意の値を挿入します。