针对highstock的增量MySQL时间戳转换

时间:2015-06-19 20:59:16

标签: php mysql

我使用highstock库来显示磁力计的输出数据,但我有一点问题。我将数据存储在bd中的两个字段中。 第一个值是保存数据的日期时间,第二个值是传感器值:

2015-06-10 01:29:43 | 15

但是因为传感器在一秒钟内发送了多个值,我需要将此时间转换为UNIX,以增量方式

让我们假设它是原始数据:

2015-06-10 01:29:43 | 15 2015-06-10 01:29:43 | 16 2015-06-10 01:29:43 | 40 2015-06-10 01:29:43 | 50 2015-06-10 01:29:43 | 15 2015-06-10 01:29:43 | 11

我将其转换为时间戳:

1444094983 | 15 1444094983 | 16 1444094983 | 40 1444094983 | 50 1444094983 | 15 1444094983 | 11

最后一步是将此时间转换为毫秒。这不是问题。问题是,我需要每一秒重复一次,必须像这样增量毫秒

1444094983001 | 15 1444094983002 | 16 1444094983003 | 40 1444094983004 | 50 1444094983005 | 15 1444094983006 | 11

但是当新的秒开始时,必须重新开始增量编号并再次从0开始。

我正在使用php,这将是我解决问题的方法

$i = 1;
foreach ($row as $result){
    $row['data_logged'] * 1000 + $i; // assuming I converted it in mysql with UNIX_TIMESTAMP
    if($prev_data != $row['data_logged']) $i = 1;
    $prev_data = $row['data_logged'];
    $i++;
}

有更好/最简单的方法吗?

1 个答案:

答案 0 :(得分:0)

基于讨论的替代设计方案:

MySQL中有一个自动增量选项,此选项注意每个插入的记录都有一个唯一键。使用该选项,可以存储数据,而无需在php中使用备用代码:

CREATE TABLE magnoMeterData(
mmdata_id INT NOT NULL AUTO_INCREMENT,
mmrecordtime TIMESTAMP,
value DOUBLE
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4K;

在此表中插入数据会产生如下记录:

  

1,1444094983001,{您的测量值}

     

2,1444094983002,{另一个测量值}   等

所以钥匙让它独一无二。该密钥在您的数据中也没有其他功能,以保持其唯一性并在其上运行订单。