5

重複の可能性:
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 テーブルに保存する必要があるとします。「abc」エントリの重複保存を避けるために、どの SQL INSERT クエリを記述する必要がありますか? 結果は次のようになります。

MyTable:
1  |  abc
2  |  bcd
3  |  cde

だがしかし:

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

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

4

3 に答える 3

6

考えられる解決策は3つあります。、、、またはを使用INSERT IGNOREREPLACEますINSERT ... ON DUPLICATE KEY UPDATE。この記事を確認してください。

また、メモリ内でarray-sと交差し、そのソリューションが適切な場合は一意の値だけを挿入することもできます。

于 2012-08-29T11:55:29.827 に答える
1

あなたのテーブルのようにしますMyVarUNIQUE

このような:

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`)
);

または、テーブルを再作成できない場合は、次を使用して変更します

ALTER TABLE `request`
ADD UNIQUE INDEX `myvaridx` (`MyVar`)
于 2012-08-29T11:59:26.280 に答える
0

このようなタスクに SQL を使用するのは無駄です。

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

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

于 2012-08-29T12:00:28.553 に答える