php - 使用数据库中已有的值更新数据库的值

标签 php mysql sql database

我有一个数据库,用于存储从不同传感器读取的数据。该表如下所示:

[传感器 ID][时间戳 MS][值]
[传感器 1][123420][10]
[传感器 1][123424][15]
[传感器 1][123428][6554]
[传感器 1][123429][20]


我想做的是:有些读取已损坏(数字为 6554),我想用下一个未损坏的值更新它(在下面显示的示例中为 20) .所以,如果一个数字是 6554,我想用下一个未损坏的值(在时间戳记中)更新它。
我正在考虑用 PHP 执行此操作,但我想知道是否可以直接使用 SQL 脚本执行此操作。

感谢 :)

最佳答案

您可以使用相关子查询...

UPDATE
  myTable
SET
  value = (SELECT value FROM myTable AS NextValue WHERE sensorID = myTable.SensorID AND timestampMS > myTable.timestampMS ORDER BY timestampMS ASC LIMIT 1)
WHERE
  value = 6554

子查询得到以下所有结果,按timestampMS排序,只取第一个;这是该 SensorID 的下一个值。

注意:如果不存在“下一个”值,它将尝试使用 NULL 值进行更新。要解决这个问题,您可以将其添加到 WHERE 子句中...

  AND EXISTS (SELECT value FROM myTable AS NextValue WHERE sensorID = myTable.SensorID AND timestampMS > myTable.timestampMS ORDER BY timestampMS ASC LIMIT 1)


编辑

或者,为了更短,只需使用 IFNULL(<sub_query>, value) ...

关于php - 使用数据库中已有的值更新数据库的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392243/

相关文章:

PhpSpreadsheet 使用循环填充单元格

mysql - 如何允许ECS任务访问RDS

mysql - 我在此过程查询中做错了什么?

PHP 没有插入 MAMP phpmyadmin 上的数据库

mysql - 两个单独的 CSV 文件和共享主键公共(public)列的两个表

php - 为什么当我向查询中添加某些内容时对象会在非对象中发生变化

php - 如何限制 Laravel Fortify 中的忘记密码请求?

PHP Laravel RESTful api for android 问题

php - Wampserver升级问题

mysql - Magento 版本。 1.9.1.0 : Sort Products by Quantity and Price descending