我一直在尝试将ON DUPLICATE KEY UPDATE添加到下面的代码中,但每次我在mysql中插入数据时,数据会一遍又一遍地添加,而我希望它们是唯一的,因此添加ON DUPLICATE KEY UPDATE。
这是我的表:
$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) ";
感谢您的帮助
答案 0 :(得分:0)
你的约束是错误的。由于您要更新除reg_date
之外的所有值,因此只应将其作为约束的一部分:
CONSTRAINT UC_sma UNIQUE (reg_date)
答案 1 :(得分:0)
我得到了我想要的结果,即没有重复的值。通过增加:
在创建表格和第二次尝试代码时id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
和CONSTRAINT UC_sma UNIQUE (price,short_sma,mid_sma,long_sma,extra_sma)
。