我有一个表格,我可以获取采样值: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/