我一直在尝试将 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/