CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
11.04.2017, 18:28:46
|
Anfänger
|
|
Registriert seit: Apr 2017
Alter: 44
Beiträge: 3
|
|
MySQL-Abfrage flexibel gestalten
Abend allerseits,
Ich hänge nun seit ca. 2 Tagen an einem Abfrageproblem und wende mich nun an euch ...
Hintergrundinfos:
Ich habe eine Datenbank welche mit Temperaturwerten gefüllt wird. Das darstellen als Diagramm dieser Werte machte ich bis dato mit Voreingestellten Datenreihen, sprich beim Drücken von Button1 kommen die Solarwerte, beim Drücken von Button2 die Kesselwerte usw.
Nun möchte ich das flexibel gestalten. Ich kann über Checkboxen auswählen welche Datenreihe ich sehen möchte. Das klappt auch (ich hole nur die Werte aus der Datenbank die ich angewählt habe) jedoch bei dem Punkt bei dem ich das Array befüllen muss welches für die Chartanzeige ist hänge ich ....
Hier bilde ich mir flexibel die Anweisung für das mysqli_query:
PHP-Code:
$result1="datumzeit";
$i=0;
if(count($_POST["reihe"]))
{
while($i<count($_POST["reihe"]))
{
//echo $_POST["reihe"][$i];
//echo "<br>";
$result1=$result1 . ', ' . $_POST["reihe"][$i];
$i++;
}
}
if (isset($_POST["alles"]) == "alles"):
{
$result1 = "datumzeit, aussentemp, speicherobentemp, speicherobentempsoll, kesseltemp, kesseltempsoll, brennerstatus, kollektortemp, speicheruntentemp, solarpumpestatus, nachladeunterdrueckungstatus, heizkreispumpestatus, speicherladepumpestatus, ansteuerungheizunt";
}
endif;
Und dann mein Problem bei der while-Schleife, wie gestalte ich das befüllen flexibel ???
PHP-Code:
require_once 'phplot-6.2.0/phplot.php';
$db = mysqli_connect("RaspberryHeizung", "pi", "senf", "vitola") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
if (isset($_POST["typ1"]) == "datum"):
{
$result = mysqli_query($db, "SELECT $result1 FROM werte WHERE DATE(datumzeit) BETWEEN '".$_POST['datum1']."' AND '".$_POST['datum1']."'");
}
endif;
if (isset($_POST["typ2"]) == "zeitfenster"):
{
$result = mysqli_query($db, "SELECT $result1 FROM werte WHERE DATE(datumzeit) > DATE_SUB(DATE(NOW()), INTERVAL ".$_POST['tage']." DAY);");
}
endif;
$anzahlds = $result->num_rows;
while($row = mysqli_fetch_assoc($result)) // Wird für jede Reihe wiederholt (Anzahl Datensätze)
{
$data[] = array('', strtotime($row["datumzeit"]), $row["aussentemp"], $row["speicherobentemp"], $row["speicherobentempsoll"], $row["kesseltemp"], $row["kesseltempsoll"], $row["brennerstatus"], $row["kollektortemp"], $row["speicheruntentemp"], $row["solarpumpestatus"], $row["nachladeunterdrueckungstatus"], $row["heizkreispumpestatus"], $row["speicherladepumpestatus"], $row["ansteuerungheizunt"]);
}
$result->close();
$db->close();
Ich hatte schon versucht mir eine Stringvariable zu bilden welche die Abfrage flexibel zusammenbaut, z.B.
PHP-Code:
$string='\'\',' . 'strtotime($row["datumzeit"])';
$data[] = array($string);
Zusammenbau war richtig, lies ich mir mit echo anzeigen ...
Ich komme einfach nicht weiter, vielleicht kann mir jemand einen Wink mit dem Zaunpfahl verpassen ...
Die Seite (Diagrammanzeige) funktioniert natürlich trotzdem wenn ich die Schleife so lasse, jedoch kommen dann zig Warnungen (logisch) was ich unschön finden.
|
12.04.2017, 09:04:41
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: MySQL-Abfrage flexibel gestalten
Ich verstehe nicht was du erreichen willst. Da steht was von "Reihe", wenn ich mir das Statement ansehe sieht das aber nach Spalten aus. Und alle unterschiedlichen Typen stehen in der gleichen Tabelle? Ich weiss garnicht was dann noch flexibel sein muss, du bekommst doch die Werte aus der DB geliefert wie du sie abgefragt hast, wie entscheidest du denn bisher wie das array nacher aussieht?
|
13.04.2017, 00:45:49
|
Anfänger
|
|
Registriert seit: Apr 2017
Alter: 44
Beiträge: 3
|
|
AW: MySQL-Abfrage flexibel gestalten
Hallo chorn,
Problem konnte ich heute Mittag lösen .... nichts desto trotz (vielleicht hilft es anderen) hier ein paar Infos:
Das sind die Checkboxen welche übergeben werden und dann in $result1 geschrieben werden (MySQL-Spalten welche ausgelesen werden sollen).
PHP-Code:
$i=0;
if(count($_POST["reihe"]))
{
while($i<count($_POST["reihe"]))
{
$result1=$result1 . ', ' . $_POST["reihe"][$i];
$i++;
}
}
Wenn der Haken "Alles" ausgewählt wurde werden alle Spaltennamen übergeben
PHP-Code:
if (isset($_POST["alles"]) == "alles"):
{
$result1 = "datumzeit, aussentemp, speicherobentemp, speicherobentempsoll, kesseltemp, kesseltempsoll, brennerstatus, kollektortemp, speicheruntentemp, solarpumpestatus, nachladeunterdrueckungstatus, heizkreispumpestatus, speicherladepumpestatus, ansteuerungheizunt";
}
endif;
Fürs Verständnis mal ein paar Bilder:
http://up.picr.de/28882564te.jpg
http://up.picr.de/28882565ci.jpg
Oder:
http://up.picr.de/28882598ff.jpg
http://up.picr.de/28882600ig.jpg
Mein Problem lag hier bzgl. der Flexibilität:
PHP-Code:
while($row = mysqli_fetch_assoc($result)) // Wird für jede Reihe wiederholt (Anzahl Datensätze)
{
$data[] = array('', strtotime($row["datumzeit"]), $row["aussentemp"], $row["speicherobentemp"], $row["speicherobentempsoll"], $row["kesseltemp"], $row["kesseltempsoll"], $row["brennerstatus"], $row["kollektortemp"], $row["speicheruntentemp"], $row["solarpumpestatus"], $row["nachladeunterdrueckungstatus"], $row["heizkreispumpestatus"], $row["speicherladepumpestatus"], $row["ansteuerungheizunt"]);
}
Dies habe ich nun wie folgt gelöst:
PHP-Code:
$i2=0;
while($row = mysqli_fetch_assoc($result))
{
$data[] = array('', strtotime($row["datumzeit"]));
if (in_array("aussentemp", $sammlung)):
{
$data[$i2][] = $row["aussentemp"];
}
endif;
if (in_array("speicherobentemp", $sammlung)):
{
$data[$i2][] = $row["speicherobentemp"];
}
endif;
if (in_array("speicherobentempsoll", $sammlung)):
{
$data[$i2][] = $row["speicherobentempsoll"];
}
endif;
if (in_array("kesseltemp", $sammlung)):
{
$data[$i2][] = $row["kesseltemp"];
}
endif;
if (in_array("kesseltempsoll", $sammlung)):
{
$data[$i2][] = $row["kesseltempsoll"];
}
endif;
if (in_array("brennerstatus", $sammlung)):
{
$data[$i2][] = $row["brennerstatus"];
}
endif;
if (in_array("kollektortemp", $sammlung)):
{
$data[$i2][] = $row["kollektortemp"];
}
endif;
if (in_array("speicheruntentemp", $sammlung)):
{
$data[$i2][] = $row["speicheruntentemp"];
}
endif;
if (in_array("solarpumpestatus", $sammlung)):
{
$data[$i2][] = $row["solarpumpestatus"];
}
endif;
if (in_array("nachladeunterdrueckungstatus", $sammlung)):
{
$data[$i2][] = $row["nachladeunterdrueckungstatus"];
}
endif;
if (in_array("heizkreispumpestatus", $sammlung)):
{
$data[$i2][] = $row["heizkreispumpestatus"];
}
endif;
if (in_array("speicherladepumpestatus", $sammlung)):
{
$data[$i2][] = $row["speicherladepumpestatus"];
}
endif;
if (in_array("ansteuerungheizunt", $sammlung)):
{
$data[$i2][] = $row["ansteuerungheizunt"];
}
endif;
if (isset($_POST["alles"]) == "alles"):
{
$data[$i2][] = $row["aussentemp"];
$data[$i2][] = $row["speicherobentemp"];
$data[$i2][] = $row["speicherobentempsoll"];
$data[$i2][] = $row["kesseltemp"];
$data[$i2][] = $row["kesseltempsoll"];
$data[$i2][] = $row["brennerstatus"];
$data[$i2][] = $row["kollektortemp"];
$data[$i2][] = $row["speicheruntentemp"];
$data[$i2][] = $row["solarpumpestatus"];
$data[$i2][] = $row["nachladeunterdrueckungstatus"];
$data[$i2][] = $row["heizkreispumpestatus"];
$data[$i2][] = $row["speicherladepumpestatus"];
$data[$i2][] = $row["ansteuerungheizunt"];
}
endif;
$i2++;
}
Vielleicht nicht "schön", aber funktionell und ich habe es hinbekommen ...
Wenn jemand ne kürzere Version hat lasse ich mich gerne "belehren" ... :-)
|
13.04.2017, 08:25:22
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: MySQL-Abfrage flexibel gestalten
Ergibt für mich immernoch keinen Sinn. Wenn du das Statement auf bestimmt Spalten (sehe keinen Zusammenhang zu Reihen) reduzierst, bekommst du auch nur die geliefert, also ist das mapping doch überflüssig.
|
13.04.2017, 23:07:17
|
Anfänger
|
|
Registriert seit: Apr 2017
Alter: 44
Beiträge: 3
|
|
AW: MySQL-Abfrage flexibel gestalten
Abend chorn,
Die Checkboxen mit welchen ich auswähle welche "Temperaturen, Statuszustände" angezeigt werden sollen haben als name -> reihe (vielleicht etwas unglücklich, es ist ja eigentlich eine Spalte in der Datenbank ...)
HTML-Code:
<input style="height: 20px; width: 20px; vertical-align: middle;" type="checkbox" name="reihe[]" value="aussentemp">Aussentemperatur
value ist der Name welcher auch so in der Datenbank steht.
Das Auslesen der nur ausgewählten Daten aus der Datenbank war auch nicht das Problem, sondern nachher das
PHP-Code:
while($row = mysqli_fetch_assoc($result))
flexibel auszuwerten und das Daten-Array für phplot zu schreiben.
Was ich noch übersehen hatte war die falsche Zuordnung der Legendennamen (nur bei Auswahl alles !), es muss folgendes gelöscht werden:
PHP-Code:
if (isset($_POST["alles"]) == "alles"):
{
$data[$i2][] = $row["aussentemp"];
$data[$i2][] = $row["speicherobentemp"];
$data[$i2][] = $row["speicherobentempsoll"];
$data[$i2][] = $row["kesseltemp"];
$data[$i2][] = $row["kesseltempsoll"];
$data[$i2][] = $row["brennerstatus"];
$data[$i2][] = $row["kollektortemp"];
$data[$i2][] = $row["speicheruntentemp"];
$data[$i2][] = $row["solarpumpestatus"];
$data[$i2][] = $row["nachladeunterdrueckungstatus"];
$data[$i2][] = $row["heizkreispumpestatus"];
$data[$i2][] = $row["speicherladepumpestatus"];
$data[$i2][] = $row["ansteuerungheizunt"];
}
endif;
Ich hoffe ich konnte es einigermaßen verständlich erklären.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:09:58 Uhr.
|