7516463Medlem sedan dec. 201349 inlägg Nu funkar det... jag insåg att det inte fanns några rader där det är minut 59 utan den kör ju varannan minut från 0 och då är sista raden...58! så där var problemet.
tusen tack för hjälpen
Nu ska vi se om jag kan få till det med att få fram förbrukningen de senaste 6h, 12h, 2 dygn osv...
Jag återkommer om jag stöter på problem...
rhdfMedlem sedan okt. 2007446 inlägg hade precis skrivit att du såklart var tvungen att ändra från 1 till 59, men det hade du såklart tänkt på ;)
Jag satt precis och funderade på hur säker man kan vara på att det finns en post på 59
SELECT SUM(B10000000D076C1D) FROM logtemp WHERE MINUTE(`datetime`)=58 AND Date(`datetime`)=DATE(now()); ger ju summan av alla timmar IDAG.
För att få en hanterbar lista av tim-värden så får du modda ner den lite
SELECT SUM(B10000000D076C1D) FROM logtemp WHERE MINUTE(`datetime`)=58 LIMIT 6 ger senaste 6 h
SELECT SUM(B10000000D076C1D) FROM logtemp WHERE MINUTE(`datetime`)=58 LIMIT 24 ger senaste 24 h,
dock inte begränsat till dygn, så kör man den 01 på natten så får man 01 igår-01 idag
MEN
SELECT DATE(`datetime`), SUM(B10000000D076C1D) FROM logtemp WHERE MINUTE(`datetime`)=1 Group by DATE(`datetime`) Order by `datetime` DESC LIMIT 2 torde ge de 2 senaste dygnen
7516463Medlem sedan dec. 201349 inlägg Nu börjar jag att få kläm på en del av detta..men det är en bit kvar. Ni hjälper mig att förstå PHP och MYSQL på ett bra sätt...
---
När jag skriver in:
SELECT DATE(`datetime`), SUM(B10000000D076C1D) FROM logtemp WHERE MINUTE(`datetime`)=1 Group by DATE(`datetime`) Order by `datetime` DESC LIMIT 2
så skapar den en lista med förbrukningen.
Min kod ser ut så här:
$query = "SELECT DATE(`datetime`), SUM(B10000000D076C1D) as dygnen FROM logtemp WHERE MINUTE(`datetime`)=58 Group by DATE(`datetime`) Order by `datetime` DESC LIMIT 2,3";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo round ($row['dygnen'], 2);
echo " kWh";
}
Då kommer bara förbrukningen med...inte datumen, hur får jag in dom?
Sedan om jag vill ha ut 1 veckas förbrukning och en månad t.ex mellan 1-31 maj ska man väl bara kunna ändra DESC LIMIT 2 till 1,5 för att få se senaste 5 dagarna... men jag vill ha dessa summerade...
förstår ni hur jag menar?
rhdfMedlem sedan okt. 2007446 inlägg
7516463 skrev:
Då kommer bara förbrukningen med...inte datumen, hur får jag in dom?
Du skriver ju bara ut förbruknings-kolumnen just nu.
Lägg till echo $row[0]; så får du med datumet.
7516463 skrev:
....men jag vill ha dessa summerade...
Enklast är väl om du summerar i php-koden
$total=0;
while($row = mysql_fetch_array($result)){
$total+=$row['dygnen'];
echo $row[0];
echo round ($row['dygnen'], 2);
echo " kWh";
}
echo "Total: "
echo round (total, 2);
Med reservation för syntax-fel p.g.a min bristfälliga kunskap i PHP
Ett alternativ kan väl vara en query typ denna
SELECT tid, dygntotal FROM (SELECT DATE(`datetime`) as tid, SUM(B10000000D076C1D) as dygntotal FROM logtemp WHERE MINUTE(`datetime`)=58 Group by DATE(`datetime`) Order by `datetime`) as lt ;
Denna ger (om jag tänkt rätt) en lista på ALLA dygnsförbrukningar.
Dock kommer du notera att det inte funkar att köra
SELECT tid, dygntotal, SUM(dygntotal). Så vill du ha både en lista på alla dygnen för att bygga upp en graf eller liknande samt en totalförbrukning så får du köra 2 frågor (eller summera direkt i koden)
för att göra livet "lättare" kan du ju skapa en View :)
CREATE VIEW `ltw` AS SELECT DATE(`datetime`) as datum, SUM(B10000000D076C1D) as dygntotal FROM logtemp WHERE MINUTE(`datetime`)=58 Group by DATE(`datetime`) Order by `datetime`
Nu kan du istället för att skriva allt det där använda
Select * from ltw och även saker som
Select SUM(dygntotal) from ltw where datum BETWEEN '2014-05-27' AND '2014-05-30'
Eller
Select dygntotal from ltw limit 6 // senaste 6 dygnen