php - 如何使用 Foreach 循环 Php 添加 ON DUPLICATE KEY UPDATE

标签 php mysql on-duplicate-key

我一直在尝试将 ON DUPLICATE KEY UPDATE 添加到下面的代码中,但是每次我在 mysql 中插入数据时,数据都会一遍又一遍地添加,而我希望它们是唯一的,因此添加重复 key 更新。

这是我的表格:

$sql = "CREATE TABLE sma (
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
short_sma VARCHAR(255) NOT NULL,
mid_sma VARCHAR(255) NOT NULL,
long_sma VARCHAR(255) NOT NULL,
extra_sma VARCHAR(255) NOT NULL,
CONSTRAINT UC_sma UNIQUE (reg_date,short_sma,mid_sma,long_sma,extra_sma)

)";

这是我对 ON DUPLICATE KEY UPDATE 的尝试,但它们都不起作用,即数据被一遍又一遍地添加到我的 SMA 表中。

第一次尝试:

$sql = "INSERT INTO sma (short_sma, mid_sma, long_sma, extra_sma) VALUES ";

foreach ($uniqe_keys as $key) {    

    $short_sma = array_key_exists($key, $short_smas)?$short_smas[$key]:"";
    $mid_sma = array_key_exists($key, $mid_smas)?$mid_smas[$key]:"";
    $long_sma = array_key_exists($key, $long_smas)?$long_smas[$key]:"";
    $extra_sma = array_key_exists($key, $extra_smas)?$extra_smas[$key]:"";
    // here we build comma separated list of value pairs to insert
    $sql .= "('$short_sma', '$mid_sma', '$long_sma', '$extra_sma'),";
}

$sql = rtrim($sql, ",") ;
$sql .= " ON DUPLICATE KEY UPDATE 

  short_sma = '" . $short_sma . "',
  mid_sma = '" . $mid_sma . "',
  long_sma = '" . $long_sma . "',
  extra_sma = '" . $extra_sma . "'

";

第二次尝试:

    $sql = "INSERT INTO sma (short_sma, mid_sma, long_sma, extra_sma) VALUES ";

    foreach ($uniqe_keys as $key) {    

        $short_sma = array_key_exists($key, $short_smas)?$short_smas[$key]:"";
        $mid_sma = array_key_exists($key, $mid_smas)?$mid_smas[$key]:"";
        $long_sma = array_key_exists($key, $long_smas)?$long_smas[$key]:"";
        $extra_sma = array_key_exists($key, $extra_smas)?$extra_smas[$key]:"";
        // here we build comma separated list of value pairs to insert
        $sql .= "('$short_sma', '$mid_sma', '$long_sma', '$extra_sma'),";
    }

$sql = rtrim($sql, ",") . " ON DUPLICATE KEY UPDATE

     short_sma = VALUES(short_sma) , mid_sma = VALUES (mid_sma), long_sma = VALUES(long_sma) , extra_sma = VALUES (extra_sma) ";

谢谢你的帮助

最佳答案

你的约束是错误的。由于您想更新除 reg_date 之外的所有值,因此只有它应该是约束的一部分:

CONSTRAINT UC_sma UNIQUE (reg_date)

关于php - 如何使用 Foreach 循环 Php 添加 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49473732/

相关文章:

php - 按日期范围对 SQL 进行排序

PHP + MySQL SQL语法错误

mysql - MySQL 用于联锁操作安全吗?

MySQL:INSERT ON DUPLICATE KEY UPDATE 并非所有字段

MySQL LOAD DATA INFILE 并进行重复键更新

PHP MySQL - INSERT 和 ON DUPLICATE KEY UPDATE with WHERE?

PHP 7 simpleXML fatal error

javascript - 是否会使用 AJAX 发送 http_only cookie?

php - 在 PHP 中嵌入 C 以提高速度

php - 使用 php 和 mysql 更新 html 表格