Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] jede x-ten Wert aus Abfrage in Array schreiben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] jede x-ten Wert aus Abfrage in Array schreiben

    Hallo zusammen,

    als Frischling in der PHP und MySQL-Welt stoße ich mit meinem Vorhaben gerade an meine Grenzen.

    Hintergrund:

    Ein Programm schreibt jede Minute Temperaturdaten in eine Datenbank. Für eine relativ übersichtliche Tagesauswertung möchte ich aber nur jeden z.B. zehnten Wert in einem jpgraph Diagramm anzeigen.
    Habe es mit folgendem Code geschafft wenigstens nur auf die Anzahl von 143 Werten zu kommen, allerdings sind es die ersten 143 Werte und nicht jeder 10. von 1439....

    PHP-Code:
    $stmt1 "SELECT Zeit, Temp
            FROM fwerte
            WHERE Datum = '2010-06-10'"
    ;

    $query mysql_query($stmt1) or die("Anfrage nicht erfolgreich");
    $anzahl mysql_num_rows($query);
     

        
    $y[] = array(); 
        
    $y2[] = array(); 
       
    $i 0;
    $Counter 1;
        while (
    $res mysql_fetch_assoc($query) AND $Counter <= $anzahl) { 
            
    $y[$i] = $res[Temp]; 
            
    $y2[$i] = $res[Zeit]; 
     
     
    print_r($y[$i]);
     
    print_r($y2[$i]);
     echo 
    "<br>";
    $Counter = ($Counter 10);
      }
     echo 
    $anzahl
    Ich hoffe es kann mir jemand helfen


  • #2
    Du könntest das direkt in der MySQL Abfrage erledigen.

    Code:
    SELECT Zeit, Temp
    FROM fwerte
    WHERE Datum = '2010-06-10' AND MOD(id, 10) = 0
    Angenommen du hast eine Spalte id die immer um eins erhöht wird (auto_increment) dann kannst du einfach checken id modulo 10 = 0 -> wird nur bei jedem 10ten Wert wahr, somit hast du jeden 10t in deinem Resultat.

    Kommentar


    • #3
      es ist nicht zu fassen, es funktioniert. Habe es selber schon mal mit mod versucht, aber irgendwie bin ich nicht erfolgreich gewesen.

      Super, vielen Dank Flor1an..

      Kommentar


      • #4
        WObei eine ID als fortlaufend vorauszusetzen immer fragwürdig ist. DU könntest auch darüber nachdenken, nicht nur jeden 10. Wert zu nutzen, sondern immer aus 10 Werten den Durchschnitt zu berechnen.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Wärs nicht vielleicht besser alle Temperaturen aus der Db zu holen und dann einen Durchschnitt von beispielsweise 10 aufeinadner Folgenden Werten zu berechnen?
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            Ähm, ich hätte schwören können, ich hätte das gerade geschrieben. Ach - habe ich ja auch
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Na Paul.Schramenko hat ja schon des öfteren antworten wiederholt ...

              Kommentar


              • #8
                Statt Dich auf die ID zu verlassen, könntest Du auch selber eine fortlaufende Nummer vergeben.
                Code:
                INSERT INTO... SET `position` = (SELECT MAX(`position`) + 1 FROM...)...

                Kommentar


                • #9
                  Die IDs haben ja nicht das Problem, dass man nicht sicherstellen kann, dass ein neuer Datensatz eine um eine größere ID hat, sondern Probleme bei zwei Eingabeinstanzen, beim Löschen von älteren/fehlerhaften Datensätzen und neuem/korrigiertem Anfügen, etc.

                  €dit: Letztlich sagt ja der Ausdruck MOD( id, 10 ) = 0 nicht mal jeder 10. Datensatz, sodern nur jeder Datensatz dessen ID durch 10 teilbar ist. Was passiert wenn ein Messgerät jede Sekunde einen Datensatz speichert und ein zweites Messgerät alle 10 Sekunden, dann kann es u.U. vorkommen, dass KEIN Datensatz für das erste Messgerät diese Bedingung erfüllt.
                  Ich würde besser einen Zeitpunkt speichern und mit diesem jeden 10. Datensatz errechnen. Also z.B. bei dem Beispiel oben die Sekunden extrahieren und diese dann mit dem Ausdruck oben selektieren...

                  Kommentar


                  • #10
                    Was bei gesammelten Temeraturdaten wohl kaum der Fall sein wird. In solchen Anwendungen wird meist nur gespeichert, aber nie editiert oder gelöscht!

                    Kommentar

                    Lädt...
                    X