mysql - 来自 php 的嵌套 sql 插入

标签 mysql select nested

我在 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() );
}

这可以通过这种方式完成还是我的方法完全不同?

最佳答案

尝试使用 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
)

关于mysql - 来自 php 的嵌套 sql 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12653966/

相关文章:

php - 如何使字符串数组在php中将其发送为JSON格式?

javascript - Node.JS + MySQL - 将 40 多个 UPDATE 语句压缩成一个,每个语句都有唯一的 WHERE 子句

MySQL:计算行中的唯一值对

c# - C# 中的简单 SQL 选择?

涉及带有时间戳列的 2 个表的 Mysql 查询

arrays - 了解如何在 lua 中访问表数组中的值

php - Laravel 5.4 SQL 查询嵌套 Where/OrWhere

mysql - 我有一张包含城市和人口的表格。我想根据人口进行随机

MySQL SELECT DISTINCT 的行为不符合预期

python - 如何比较两个嵌套数据结构以进行单元测试?