php - MySQL:如果定义的行相同,则不插入新行

标签 php mysql sql

我有一个表格,我可以获取采样值:AeroSamples

id    time    temperature    pressure    humidity

我每隔 5 分钟对这些值进行一次采样。在向表中插入新行之前,我检查最后一行的温度、压力和湿度值是否与当前值相同。如果是这样,我不想添加新行。否则可以添加新记录。

我是这样做的:

SELECT temperature, pressure, humidity FROM AeroSamples ORDER BY id DESC LIMIT 1

当我得到最后一个值时,我将三个字段与当前值进行比较,这是我不喜欢的方式:

if($row["temperature"] !== $curTemp || $row["pressure"] !== $curPres || $row["humidity"] !== $curHumi)
{
    $db->prepare("INSERT INTO AeroSamples (temperature, pressure, humidity) VALUES(:t,:p,:h)");
    ...
}

如何只执行此 SQL?

ON DUPLICATE KEY UPDATE ... 对我有帮助吗?我不这么认为。因为我不确定它是否一次对多个字段有效。

最佳答案

之前的值不会相同,因为时间不同。唉。

您可以使用 insert 来做到这一点。 . .选择语法。这个想法是选择插入的最后一行并使用 where 子句来过滤行。当值相同时,过滤器将不返回任何行(因此不返回任何插入):

insert into AeroSamples(temperature, pressure, humidity) 
    select :t, :p, :h
    from (select temperature, pressure, humidity
          from AeroSamples
          order by id desc
          limit 1
         ) as1
    where as1.temperature <> :t or as1.pressure <> :p or as1.humidity <> :h;

关于php - MySQL:如果定义的行相同,则不插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803124/

相关文章:

python:操作错误:接近 "%":语法错误

c++ - Qt:数据库连接不会打开

php - 只有使用用户 ID 1 登录才能看到好友列表

php - drupal View 对这个用例有用吗

java - Hibernate 2 主键作为外键

java - 在Mysql query-java中调用java方法

php - 重复的结果

c# - 在 C# 中检查 SQL 列的类型

php - 如何使用php/动态价格从mysql获取促销日期

php - 如何用正则表达式替换具有相同字符数的多个字符?