2

我在 php 中有一个嵌套数组,并且只有在不存在重复项时才尝试将数据插入到 mysql 表中。副本应该只检查与 sensor_serial 和 dates 字段的匹配。我对 DUPLICATE 没有运气,因为无论其他字段如何,id 都是唯一的。这是表格布局:

CREATE TABLE IF NOT EXISTS `temps_test` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `sensor_serial` varchar(64) COLLATE latin1_general_ci DEFAULT NULL,
    `temp_c` float DEFAULT NULL,
    `dates` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `date` (`dates`)
)

这是我的非工作代码。我似乎无法完全正确。

foreach ($output as $k => &$v) {
    $sql = "INSERT INTO temps_test (sensor_serial,temp_c,dates) VALUES ('$v[7]','$v[3]','$v[5]') WHERE NOT EXISTS (SELECT * FROM temps_test WHERE sensor_serial='$v[7]' AND dates='$v[5]')";
    $go = mysql_query($sql) or die( mysql_error() );
}

可以这样做还是我的方法完全关闭?

4

1 回答 1

0

尝试使用ON DUPLICATE KEY UPDATE

INSERT INTO temps_test (sensor_serial,temp_c,dates)
VALUES ('val1','val2','val3') 
ON DUPLICATE KEY UPDATE sensor_serial=sensor_serial;

确保在字段上添加约束sensor_serial,例如

CREATE TABLE IF NOT EXISTS `temps_test`
(
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `sensor_serial` varchar(64) COLLATE latin1_general_ci DEFAULT NULL,
    `temp_c` float DEFAULT NULL,
    `dates` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `date` (`dates`),
    CONSTRAINT t_uq INIQUE (`sensor_serial`)     -- <== this one
)
于 2012-09-29T15:30:55.827 回答