将PHP数组中的唯一值插入SQL表[重复]

Posted

技术标签:

【中文标题】将PHP数组中的唯一值插入SQL表[重复]【英文标题】:Insert unique values from PHP array into SQL table [duplicate] 【发布时间】:2012-08-24 00:37:43 【问题描述】:

可能重复: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 表中。为了避免重复保存“abc”条目,我需要编写哪个 SQL INSERT 查询?结果必须是:

MyTable:
1  |  abc
2  |  bcd
3  |  cde

但不是:

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

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

【问题讨论】:

为您的 MyVar 列设置唯一约束。所以试图插入一个已经存在的值是行不通的。 ***.com/questions/548541/… INSERT IGNORE + 其余查询 哪个重复(合并/相交数组)或(插入不存在的东西)或两者都取决于细节,但我认为那里有足够的材料可以让你找到一个好的解决方案:) 【参考方案1】:

有 3 种可能的解决方案:使用 INSERT IGNOREREPLACEINSERT ... ON DUPLICATE KEY UPDATE。检查这个article。

您也可以在内存中intersect array-s,然后如果该解决方案适合您,则只插入唯一值。

【讨论】:

【参考方案2】:

在您的表格中将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`)

【讨论】:

【参考方案3】:

使用 SQL 来完成这样的任务会很浪费。

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

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

【讨论】:

以上是关于将PHP数组中的唯一值插入SQL表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将整个PHP数组散列成唯一值[重复]

PHP合并数组只有不重复的值

PHP 仅将唯一值添加到数组中

PHP将数据插入SQL数据库表产生空白行

将下拉列表中的文本值传输到其各自的数据库 ID - sql 插入和 php

如何使用PHP Wordpress将沙箱Paypal返回值插入MySQL表?