Я работаю над монитором данных для солнечных панелей.
Сейчас я работаю на ограниченном пространстве и получаю много данных, которые регистрируются в базе данных.
Чтобы уменьшить мое пространство, я пытался найти способ заставить таблицы данных подсчитывать все каждые 15 минут, сохранять их в новую таблицу и удалять старые таблицы.
Я попытался сделать это с помощью cronjob, а позже попытался создать скрипт php, который бы справился с этим.
Теперь этот код не приблизился к тому, что я планировал получить, и я застрял в этой проблеме, и я знаю, что, вероятно, есть люди, которые знают ответ на этот вопрос.
Я сталкивался с подобными проблемами при поиске по сайту, но не сталкивался с вопросом «Подсчитать и удалить».
Это ограничивает пространство, которое он использует.
Проще говоря, я пытаюсь найти способ с помощью php, чтобы он подсчитывал и сохранял записи данных от «инверторов» до «инверторов_дней», и удаляю существующие записи из «инверторов».
Datatables следующие:
| 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";
}
}
Поскольку у меня больше не было никакой помощи в этом, я просто продолжил и оставил эту часть, пока не наткнулся на функцию 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);
?>
Других решений пока нет …