【问题标题】:Insert unique values from PHP array into SQL table [duplicate]将PHP数组中的唯一值插入SQL表[重复]
【发布时间】: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 列设置唯一约束。所以试图插入一个已经存在的值是行不通的。
  • INSERT IGNORE + 其余查询
  • 哪个重复(合并/相交数组)或(插入不存在的东西)或两者都取决于细节,但我认为那里有足够的材料可以让你找到一个好的解决方案:)

标签: php sql insert


【解决方案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”函数来处理重复。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 1970-01-01
        相关资源
        最近更新 更多