Meddelande

Minska
No announcement yet.

Räkna ur Mysql databas.

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Räkna ur Mysql databas.

    Hej.

    Min php+mysql kunskap är lite begränsad.

    Jag har en databas som samlar ihop data i kwh varje 2 minuter. Jag skulle vilja ha en kod i php där man kan räkna ihop datan under en viss period. t.ex Förbrukning under 1 vecka, 2 veckor... 1 månad, 2 månader...1 år osv...

    tack på förhand.

  • #2
    Lite mer förklaring:

    Jag har en kolumn med namnet:DATETIME med datum i format: 2014-05-18 13:42:36

    Sedan är kolumnen "Kwh" där värden från sensorn läggs in t.ex 0,02

    Det jag vill ha ut är t.ex summan av värden från "kwh" mellan t.ex datum 2014-05-01 00:00:00 och 2014-05-07 00:00:00 för att få reda på förbrukningen den senaste veckan...

    Kommentera


    • #3
      Använd SUM() för att få fram summan.
      Kod:
      SELECT SUM(Kwh) FROM tabell WHERE `datetime` BETWEEN '2014-05-01 00:00:00' AND '2014-05-07 00:00:00'
      Notera att du måste använda backticks (`) runt datetime om det är kolumnnamnet för datumkolumnen, eftersom datetime är ett reserverat ord i MySQL.
      "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

      Kommentera


      • #4
        Tack. Om man vill använda antalet rader istället? Ska jag använda row istället för datetime och sedan ange antalet rader istället för datum?

        Kommentera


        • #5
          Nu vet jag inte om jag förstår riktigt. Vill du ha summan av till exempel de 10 senaste raderna? Använd LIMIT för att begränsa antalet rader i resultatet. Till exempel så här:
          Kod:
          SELECT SUM(Kwh) FROM tabell ORDER BY id DESC LIMIT 10
          "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

          Kommentera


          • #6
            Jo du förstod nog rätt...ska fixa det i kväll och se om jag får det atgt fungera

            Kommentera


            • #7
              så här ser min kod ut nu...

              Kod:
              <?php
              $opendb = mysql_connect("******", "******", "*******")
              or die("Kunde inte ansluta till MySQL:<br />" . mysql_error());
              
              mysql_select_db("logtemp")
              or die("Kunde inte ansluta till databasen:<br />" . mysql_error());
              
              $query = "SELECT SUM(B10000000D076C1D) FROM logtemp ORDER BY DATETIME DESC LIMIT 5;";
              	 
              $result = mysql_query($query) or die(mysql_error());
              
              while($row = mysql_fetch_array($result)){
              	echo round ($row['SUM(B10000000D076C1D)'],2);
              	echo "<br />";
              }
              ?>
              Dock så räknar den i hop hela kolumnen även fast jag anger att den bara ska räkna de sista 5 raderna. Vad har jag gjort fel?

              DATETIME är en kolumn i databasen jag har även provat att skriva `datetime` men det är samma sak där, den räknar ihop hela databasen.

              Kommentera


              • #8
                Hmm... testade lite själv nu, och det verkar som att du behöver göra en subselect för att slippa summera hela tabellen. Helknasigt tycker jag, men men

                Kod:
                SELECT SUM(B10000000D076C1D) AS summa FROM (SELECT B10000000D076C1D FROM logtemp ORDER BY `datetime` DESC LIMIT 5) AS s
                "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

                Kommentera


                • #9
                  Då gnäller den att raden:
                  Kod:
                  	echo round ($row['SUM(B10000000D076C1D)'],2);
                  inte är correct

                  Kommentera


                  • #10
                    Det är för att jag satte ett alias "summa" på det. Använd detta
                    PHP-kod:
                    echo round (row['summa'], 2); 
                    eller ta bort AS summa från SQL-frågan.
                    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

                    Kommentera


                    • #11
                      Tack så mycket... nu är det precis som jag vill ha det... nu ska bara tidsramarna in så är allt klart.

                      Återigen Tack!

                      Kommentera


                      • #12
                        Programmet Logtemp lägger in data varannan minut. I slutet av varje heltimme nollställer den räkneverket och börjar om igen.

                        Databasen ser ut så här:

                        Kod:
                        DATETIME		B10000000D076C1D	id
                        2014-05-26 12:01:01	0.02			1
                        2014-05-26 12:03:02	0.04			2
                        2014-05-26 12:05:04	0.06			3
                        2014-05-26 12:07:01	0.08			4
                        2014-05-26 12:09:03	0.10			5
                        2014-05-26 12:11:01	0.12			6
                        2014-05-26 12:13:02	0.14			7
                        2014-05-26 12:15:04	0.20			8
                        2014-05-26 12:17:01	0.22			9
                        2014-05-26 12:19:03	0.30			10
                        ...
                        2014-05-26 12:55:04	0.40			29
                        2014-05-26 12:57:01	0.42			30
                        2014-05-26 12:59:03	0.50			31
                        Jag vill kort och gott få ut aktuell förbrukning...alltså den sista xx:59 raden, för de senaste 2h, 6h,12h,24h...osv. hur ska jag göra detta? har suttit och försökt men får inte till det.

                        HJÄLP!
                        Last edited by 7516463; 2014-05-27, 06:11. Anledning: Stavfel

                        Kommentera


                        • #13
                          Hmm om databasen ser ut sådär så är det ju en sak som slår mig.
                          Loggar den verkligen aktuell förbrukning? Det är inte total förbrukning den lägger in? Så för att få "minutvärden" (eg varannan minut) så får du ta en post minus föregående.

                          Med SUM kommer du ju i så fall inte få förbrukningen utan en summa av totaler.
                          En dataserie som ser ut exempelvis
                          0.1, 0.2, 0.3, dvs 0.1 ökning/steg skall ju resultera i 0.3, inte 0.6

                          Kommentera


                          • #14
                            Nä förbrukningen är ju inte konstant utan ökar lite olika beroende på förbrukningen.

                            Men det jag vill få ut är är hur man plockar ut de poster som är varje xx:59x för att sedan kunna summera som, men eftersom det är sekunder med ock databasen uppdateras inte exakt varje helsekunder alltså 12:00:00 utan det är någon sekunder som alltid skiljer sig åt.

                            Hur gör jag det? alltså antingen att kunna plocka ut raderna som 12:59 bara och inte 12:50:02 även fast sekunderna är med i databasen.

                            Och hur skriver jag för att plocka ut enstaka rader och summera dom.

                            Kommentera


                            • #15
                              Eller... jag vet hur man plockar ut enstaka rader ut databasen och summera dessa.
                              så här ser det isåfall ut för 24h:
                              Kod:
                              $query = "SELECT SUM(B10000000D076C1D) FROM logtemp WHERE id IN(11, 41, 71, 101, 131, 161, 191, 221, 251, 281, 311, 341, 371, 401, 431, 461, 491, 521, 551, 581, 611, 641, 671, 701)";
                              Men jag vill inte göra detta manuellt för varje dag utan att jag lägger in en kod som automatiskt plussar ihop var 30 rad för varje dygn, Går det?

                              Kommentera

                              Working...
                              X