irgendwie stoße ich gerade an die Grenzen meiner PHP-Fähigkeiten.
Ich habe hier ein mehrdimensionales Array, welches Temperaturwerte und die dazugehörigen Timestamps enthält. Nun möchte ich daraus den Min-Wert und den Max-Wert auslesen.
(Die Werte hier sind fiktiv - will nur deutlich machen, wie es aussieht und das es mit den kleinsten Werten beginnt)
Ich suche also nach einer Möglichkeit, das Array nach Temperaturwert zu sortieren und gleichzeitig den größten Wert und den kleinsten Wert auszuwerten (incl. Timestamp).
Ich habe jedoch noch eine Frage: Wie komme ich nun an den TimeStamp? Die Variablen $Max und $Min enthalten nur den „Value“.
Darüber hinaus muss ich den „Value“ noch irgendwie in Float konvertieren, der ist nur „ganzzahlig“, d.h. die Kommastellen fehlen.
Die Min und Max Werte sollten sich doch über SQL ganz leicht ermitteln lassen - für das ist es ja letztendlich da.
$result = mysql_query("SELECT `VarID`, max(`TimeStamp`), `Value`
FROM $IPS_DB_TABLE
WHERE `VarID` = '22107' AND `TimeStamp` > $Today
GROUP BY `VarID`, `Value`");
Hab allerdings (noch) keine MySQL DB, wo ich das mal kurz ausprobieren könnte…
zunächst erst einmal vielen Dank für Eure Antworten.
@Tetrapack:
Vielen Dank für den Verweis auf die Such-Funktion. Ich bin auch auf den von Dir verlinkten Thread gestoßen und glaube nicht, dass dieser der gleichen Fragestellung entspricht. Der User Attain möchte nur den kleinsten Wert, der in einer Spalte steht. Ich habe im ersten Posting in diesem Thread verdeutlicht, dass ich das bereits soweit schaffe, die Werte zu sortieren. Mir gehen jedoch die zu den Werten gehörenden TimeStamps verloren. Die Lösung vom User 1007 sortiert dort ebenfalls nur die benötigten Werte, der Rest geht verloren. User TetraPack schreibt, dass „array_multisort“ die Lösung ist, ohne jedoch ein Beispiel zu posten. Ich persönlich komme mit der Syntax dieses Befehls leider nicht klar, weshalb ich mir hier Hilfe erhofft habe.
Verbessere mich bitte, falls ich damit falsch liegen sollte.
@ernie:
Ich habe festgestellt, dass TimeStamps doppelt vorkommen. Außerdem werden die Max und Min nur ganzzahlig angezeigt. Vielleicht hast Du eine Lösung parat, die auf meinem ursprünglichen Array aus Posting 1 basiert?
@Brownson:
Ich habe den Code mal eben im phpMyAdmin abgesetzt. Der Max-Wert kommt zwar, aber wohl für jeden gefundenen Datensatz. Von daher war das nicht die richtige Lösung. Trotzdem vielen Dank dafür!
@ALL:
Sorry, aber mit Arrays stehe ich echt auf Kriegsfuß…
Diese Methode hatte ich auch kurz im Sinn, war mir aber bisher zu unschön Aber manchmal ist der unschöne Weg der einfachste und effektivste …
Wenn ich mal eine ruhige Minute habe, scheib’ ich euch noch ein Beispiel für Array multisort. Der Befehl ist ein bißchen tricky, sollte das aber können, was Du willst.
Wenn aus dem SQL Befehl das Ding für jeden Datensatz rauskommt, kann man das aber auch auf jeden Fall anpassen, das es stimmt …
$result = mysql_query("SELECT `VarID`, `TimeStamp`, `Value`
FROM $IPS_DB_TABLE
WHERE `VarID` = '22107'
AND `TimeStamp` = (SELECT max(`TimeStamp`)
FROM $IPS_DB_TABLE
WHERE `VarID` = '22107'
AND `TimeStamp` > $Today)");
vielen Dank dafür, das funktioniert! Ich suche jedoch den Maximal-Temperaturwert. Habe es von daher umgewandelt in:
$result = mysql_query("SELECT `VarID`, `TimeStamp`, `Value`
FROM $IPS_DB_TABLE
WHERE `VarID` = '22107'
AND `Value` = (SELECT max(`Value`)
FROM $IPS_DB_TABLE
WHERE `VarID` = '22107'
AND `TimeStamp` > $Today)");
Das Script läuft und tut was es soll, jedoch braucht das Script dadurch komischerweise länger
@Tetrapack:
Ich habe mich mal ein wenig näher mit Arrays beschäftigt. Ich glaube, ich kann Dein Beispiel aus dem anderen Thread nun auf meine Umgebung übertragen. Werde es probieren und mich hier melden.
Das Beispiel von Tetrapack habe ich soweit hinbekommen, dass ich die Werte im Array zwar sortiert bekommen habe, mir jedoch der TimeStamp dabei auf der Strecke geblieben ist.
Trotzdem noch einmal vielen Dank an alle, die geholfen haben!