2015-06-19 56 views
0

我正在使用highstock庫顯示來自磁力計的輸出數據,但我有一個小問題。我將數據存儲在bd中的兩個字段中。 第一個值是數據保存的日期時間,第二個傳感器值:Highstock增量MySQL時間戳轉換

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++; 
} 

有做一個更好的/最簡單的方法?基於上述討論

+0

你只是想要唯一的數據,或者你存儲這個獨特的方式。你可以更容易地存儲,而不是有這個精心製作的算法... –

+0

存儲它的方式我沒有問題,它需要像這樣:'2015-06-10 01:29:43 | 15'因爲我不僅會在高庫中展示它。 問題是highstock請求一毫秒的價值,但是當我存儲我以日期時間的方式。你有什麼建議?即使我必須改變存儲方式 – GEPD

+1

否,您不必更改它,但是當它存儲到最初存儲的唯一存儲或數據時,有一種更簡單的方法可以執行此操作。你怎麼知道你需要添加ms的記錄,當你在一秒鐘(999ms)結束時你會做什麼? –

回答

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,{另一個測量值} 等

所以關鍵保持它的獨特。關鍵還沒有在您的數據中的其他功能,然後保持它的獨特性,並在其上運行一個訂單。

+0

感謝您的幫助,在嘗試不同的事情後,我無法存儲時間戳記的時間(以毫秒爲單位),我只讀取了MySQL 5.6.7或海格。 我的問題是沒有存儲數據(我已經有一個獨特的關鍵)。而是在highstock圖形中顯示它,以在一秒內顯示多個數據它必須是毫秒的日期時間,但我只能存儲在時間戳中,但時間戳不會存儲毫秒。 我目前的結構幾乎與您的設計相同。 我會繼續精心策劃的算法,直到找到更好的東西。 – GEPD

+0

您可以使用長字段來存儲值:因此,請從時間戳類型切換到長類型。然後它存儲你擁有的價值(然後我的模型仍然可以工作,就像獎金一樣)。 –

+0

使用長場可以是一個不錯的選擇。我會試一試。你的模型工作正常,我正在處理類似的事情。 – GEPD