Oma*_*bid 2 php mysql laravel-5.1
我有以下mysql表
+---------------------+------+
| time | val |
+---------------------+------+
| 2005-02-03 00:00:00 | 2.11 |
| 2005-02-04 00:00:00 | 2.11 |
| 2005-02-05 00:00:00 | NULL |
| 2005-02-06 00:00:00 | NULL |
| 2005-02-07 00:00:00 | 3.43 |
| 2005-02-08 00:00:00 | NULL |
| 2005-02-09 00:00:00 | NULL |
| 2005-02-10 00:00:00 | 5.66 |
| 2005-02-11 00:00:00 | 5.66 |
| 2005-02-12 00:00:00 | NULL |
+---------------------+------+
Run Code Online (Sandbox Code Playgroud)
我想创建一个算法(在PHP中),根据最后一个非空值填充NULL值.因此该表将成为以下内容
+---------------------+------+
| time | val |
+---------------------+------+
| 2005-02-03 00:00:00 | 2.11 |
| 2005-02-04 00:00:00 | 2.11 |
| 2005-02-05 00:00:00 |>2.11 |
| 2005-02-06 00:00:00 |>2.11 |
| 2005-02-07 00:00:00 | 3.43 |
| 2005-02-08 00:00:00 |>3.43 |
| 2005-02-09 00:00:00 |>3.43 |
| 2005-02-10 00:00:00 | 5.66 |
| 2005-02-11 00:00:00 | 5.66 |
| 2005-02-12 00:00:00 |>5.66 |
+---------------------+------+
Run Code Online (Sandbox Code Playgroud)
我正在寻找如何处理这种情况的线索.我正在使用PHP-Laravel.
这里有一个SQLFiddle用于'标准'SQL.
正如评论所示,您应该在填充表时修复此问题.也就是说,它可以在PHP或MySQL中完成.这是一个选项:
SET @x:=0;
SELECT `time`, IF(val IS NOT NULL, @x:=val, @x) AS val
FROM yourtable
ORDER BY `time`;
Run Code Online (Sandbox Code Playgroud)
请记住,您的结果将根据订购等WHERE而改变.用于SET @x:=0;为第一行具有NULL值的情况定义默认值.
如果您需要永久修复数据,而不是单个查询,则可以使用"正确"值更新表:
SET @x:=0;
UPDATE yourtable SET val=IF(val IS NOT NULL, @x:=val, @x)
ORDER BY `time`;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |