2016-01-12 30 views
-2

我正在研究太陽能電池板的數據監視器。 現在我正在有限的空間上工作,並獲取了很多正在數據庫中記錄的數據。 爲了縮小我的空間,我試圖找到一種方法,使數據表每15分鐘計算一次,並將其存儲到新表中,並刪除舊錶。計數數據記錄並刪除舊的一次

我試圖用cronjob來做到這一點,後來試圖做一個PHP腳本來處理它。

現在,代碼並沒有接近我的計劃,我堅持這個問題,我知道可能有人知道這個問題的答案。 我遇到了類似的問題,通過網站搜索,但沒有遇到「計數和刪除」的問題。 這限制了它使用的空間。

簡單地說,我試圖找到一種方式使用PHP來使它計數和存儲從「逆變器」到「inverters_day」的數據記錄,並從「逆變器」刪除excisting記錄。

的數據表如下:數據的

| timestamp | timestamp | No | CURRENT_TIMESTAMP 
| inverter | int(11) | No | 
| wh   | int(11) | No | 
| dcp  | int(11) | No | 
| dcc  | float  | No | 
| efficiency | float  | No | 
| acf  | int(11) | No | 
| acv  | float  | No | 
| temp  | float  | No | 
| status  | int(11) | No | 

實施例:

|2016-01-08 08:34:24|110134878|889901|0|0.05|0|49|55|2|1 
|2016-01-08 08:34:59|110134878|889901|0|0.05|0|49|55|2|1 
|2016-01-08 08:35:23|110048316|643076|0|0.05|0|49|55|1|1 

Inverter_day高於一個,它的結構相同的一個重複。

對不起,我忘了添加我試過的代碼。

if ($sql = mysqli_query ($conn, "SELECT COUNT (*) FROM logs WHERE timestamp < NOW() - INTERVAL 15 MINUTES")) { 
    $row_slt = mysqli_num_rows($sql); 
    if ($row_slt > 0) { 
     $sql = mysqli_query ($conn, "INSERT INTO inverter_day (timestamp, inverter, wh, dcp, dcc, efficiency, acf, acv, temp, status) SELECT timestamp, inverter, wh, dcp, dcc, efficiency, acf, acv, temp, status FROM logs WHERE timestamp NOT IN (select timestamp from inverter_day)"); 
    } else if ($row_slt == 0) { 
     echo "<br> The Tables are up to date <br>"; 
    } else { 
     echo "<br> Oops something went wrong. Please try again"; 
    } 
} 
+1

歡迎堆棧溢出!爲了有效地幫助您,我們需要在您的系統上提供更多細節。如果你發佈了你的表結構(比如'SHOW CREATE TABLE table_name'的輸出),這將有所幫助。此外,還包括表中涉及的一小組有代表性的樣本行。你的表格是否包含任何日期時間/時間戳列?請編輯上面的原始帖子,在數據庫中包含一些信息,謝謝。 –

+0

'空間'很便宜。你的例子數據並不大。您可以擁有數百萬行的尺寸,並將其存儲在適合筆記本電腦的驅動器中。 – user3741598

+0

@ user3741598使用樹莓派,限於16GB sd卡。這也是數據的「樣本」。 – Noah

回答

0

因爲我已經沒有任何這方面的進一步的幫助,我只是去上留下這一部分,直到我遇到了INSERT SELECT功能。

這個問題的解決方案是使用:

$query = "INSERT INTO enecsys_day (id, wh, dcpower, dccurrent, efficiency, acfreq, acvolt, temp, state) SELECT id, SUM(wh), SUM(dcpower), SUM(dccurrent), SUM(efficiency), SUM(acfreq), SUM(acvolt), SUM(temp), SUM(state) FROM enecsys GROUP BY id HAVING COUNT(id) > 1"; 

完整的代碼,我用:

<?php 
       mysql_connect($servername,$username,$password); 
       mysql_select_db($database); 
       $query = "INSERT INTO enecsys_day (id, wh, dcpower, dccurrent, efficiency, acfreq, acvolt, temp, state) SELECT id, SUM(wh), SUM(dcpower), SUM(dccurrent), SUM(efficiency), SUM(acfreq), SUM(acvolt), SUM(temp), SUM(state) FROM enecsys GROUP BY id HAVING COUNT(id) > 1"; 
       $resultaat = mysql_query($query); 
       while ($row = mysql_fetch_array($resultaat)) 
       { 
      ?> 
      <tr> 
       <td><?php $row["id"]; ?></td> 
       <td><?php $row["SUM(wh)"]; ?></td> 
      </tr> 

      <br /> 
      <?php 

     } 


$delete = "DELETE FROM enecsys"; 
$dresultaat = mysql_query($delete); 

      ?>