将PHP数组中的唯一值插入SQL表

时间:2012-08-29 11:52:33

标签: php sql insert

  

可能重复:
  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`)
) 

有两个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

更新: 也许应该以忽略重复条目的方式创建/定义MyTable?

3 个答案:

答案 0 :(得分:6)

有三种可能的解决方案:使用INSERT IGNOREREPLACEINSERT ... ON DUPLICATE KEY UPDATE。请检查此article

您也可以在内存中intersect array-s,然后在该解决方案适合您的情况下插入唯一值。

答案 1 :(得分: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`)
);

或者,如果您无法重新创建表格,请使用

进行更改
ALTER TABLE `request`
ADD UNIQUE INDEX `myvaridx` (`MyVar`)

答案 2 :(得分:0)

使用SQL执行此类任务将非常浪费。

我建议使用“array_merge”函数合并数组,然后使用“array_unique”函数来处理重复。

然后将唯一值插入数据库。