MySQL - Aus Spalte 3, maximaler Wert ermitteln, gesamte zeile in arry ausgeben

Flipswetter

Grünschnabel
Hallo zusammen

Ich betreibe eine Wetterseite und suche schon länger eine Möglichkeit aus einem ausgewähltem Zeitraum zb. Tag 00:00 bis 23:59 einen Max und Min wert aus einer Spalte zu augewähltem Zeitraum zu ermitteln.

Meine MySQL Tabelle sieht so aus (siehe Anhang)

Das Ziel ist es aus zb. Spalte 4 (TEMP) ein Maxwert in vor angewähltem Zeitraum (Tag) zu ermitteln, und aus zu geben
Das Ziel ist es aus zb. Spalte 4 (TEMP) ein Minwert in vor angewähltem Zeitraum (Tag) zu ermitteln, und aus zu geben
Ein Weiteres Ziel ist es die Zeile des jeweiligen max- und minwerte aus zu lesen um den jeweilen DATEID zum Wert aus zu geben

Müsste Ansatz so gehen, zumindest teile daraus
http://www.pscl.ch/index.php/tutori...1-erweitern-optimieren/2-2-1-2-min-max-events


Vielen Dank für hilfreiche Ansätze

http://www.flipswetter.ch/
http://flipswetter.ch/a_flipswetter_neu/
 

Anhänge

  • phpMyAdmin MySQL Tabelle.JPG
    phpMyAdmin MySQL Tabelle.JPG
    145,3 KB · Aufrufe: 26
Mal als Einführung:
SQL Aktuelle Einträge pro Gruppe auslesen



Für dich umgesetzt sieht dann das etwa so aus:


PS:
Ein Feld date zu nennen ist gar nicht gut. Date ist auch ein Datentyp und ein Befehl in MySQL. Also ein reserviertes Wort.
SQL:
-- MAX
select
    t0.dateid AS max_dateid,
    t_max.max_temp
from
    myTable AS t0,
    inner join(
        select t1.date, max(t1.temp) as max_temp
        from myTable AS t1
        group by t1.date
    ) AS t_max
    on t0.date = t_max.date
;

-- MIN
select
    t0.dateid AS min_dateid,
    t_min.min_temp
from
    myTable AS t0,
    inner join(
        select t2.date, min(t2.temp) as min_temp
        from myTable AS t2
        group by t2.date
    ) AS t_min
    on t0.date = t_min.date
;
 
Hallo

Danke soweit für deine Antwort.
Ich muss mich entschuldigen die Spalten Beschreibung war nicht die beste. (ich suche aus DATE und nicht aus DATEID. Entschuldige mein Fehler

Habe nun versucht den Code zu erweitern.
Die Verbindung zur Datenbank klappt, nur das Ergebnis der Rechnung ergibt immer -1 und nicht 16.6

Da ich dem Code nicht genau folgen kann bin ich mir nicht sicher, ob das Vorgabe datum 2016-04-15, am richtigen Ort steht...?

Habe es wie folgt versucht:

PHP:
<?php
mysql_connect('localhost', 'user', 'paswort') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('dbname') or die  ("Keine Verbindung möglich: ".mysql_error());

$sql  = "SELECT
    t0.dateid AS max_dateid,
    t_max.max_temp
FROM
    tabellename AS t0,
    INNER JOIN(
        SELECT t1.DATE, MAX(t1.temp) AS max_temp
        FROM tabellenname AS t1
        GROUP BY t1.DATE
    ) AS t_max
    ON t0.DATE = t_max.DATE WHERE date = '2016-04-15'"
;
mysql_query($sql);
echo mysql_affected_rows();
?>


Das Ziel ist es aus Spalte 4 ((TEMP) in 1 min. Werten) ein Maxwert in vor angewähltem
Zeitraum (Tag, (2016-04-15)) zu ermitteln, und aus zu geben.
Ein Weiteres Ziel ist es die Zeile des jeweiligen max wert aus zu lesen, um die Stunden und Minuten aus
(DATEID) zum Wert dazu aus zu geben.
(Siehe My SQL Bild im Anhang oben)

Vielen Dank für eure Hilfe im Voraus.


http://flipswetter.ch/a_flipswetter_neu/
 
Zuletzt bearbeitet:
Was soll die Zeile? Die macht nur Sinn bei INSERT, DELETE oder UPDATE. ABer nicht bei einem SELECT
PHP:
echo mysql_affected_rows();

Dein WHERE ist schon richtig. Ausser das du unbedingt den Tabellenalias davor schreiben solltest. Oder du setzt den Spaltenname in `.
Wie gesagt. DATE ist kein Feldname sondern ein SQL-Befehl. Darum musst du SQL ganz klar mitteilen, dass du nicht den Befehl meinst sondern dein Feld mit dem Namen date. Wenn du noch kannst, benenne das Feld um. Auch time.
 
Hallo
Danke soweit

Die Tabellen Spalten namen kann ich zum heutigen Zeitpunkt schlecht ändern, da extrem viele Dateien Modifiziert werden müssten.

Die Zeile habe ich von:
item: Tutorial: Debug Queries

Von da habe ich
PHP:
echo mysql_affected_rows();

Es Kommt als "Resultat" ( -1 )

Was muss ich noch berücksichtigen ?
Was muss ich genau bei der Resultat Ausgabe ändern?

PHP:
mysql_connect('localhost', 'XXXXXXX', 'XXXXXXXXXXXX') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('XXXXXXXXXX') or die  ("Keine Verbindung möglich: ".mysql_error());


$sql  = "SELECT
    t0.dateid AS max_dateid,
    t_max.max_temp
FROM
    wswinbasisdatena AS t0,
    INNER JOIN(
        SELECT t1.DATE, MAX(t1.temp) AS max_temp
        FROM wswinbasisdatena AS t1
        GROUP BY t1.DATE
    ) AS t_max
    ON t0.DATE = t_max.DATE WHERE date = '2016-04-12'"
;
mysql_query($sql);
echo mysql_affected_rows();

Was währe dann die korrekt Methode um (Tages Max wert inklusive dazugehörige zeit ) auszugeben ?

PHP:
echo $sql;
geht auch nicht
PHP:
echo $row['t_max.max_temp'];
geht auch nicht


Ich bin blutiger Anfänger und hoffe auf geduldigen Lehrer

Weiteren Dank für die Hilfe im voraus

Gruss
Flipswetter
 
Hi

hast du die große Warnung am Anfang von Yaslaws Tutorial gesehen?
Mit einer aktuellen PHP-Version funktioniert dein Code ganz einfach nicht mehr.
 
Hallo zusammen

Habe mit einem anderen weg versucht nur mal den min temp wert zu ermitteln.
Genau so wie ich das bei einem wert aufruf mache (siehe www.flipswetter.ch) nur mit select mintemp

Würde So aus sehen:


Code:
<?php
//mit deiner datenbank verbindung ersetzen
include("db.php");

//dein wettertabellen Name
$tableName = "wswinbasisdatena";


//die html parameter in variablen speichern
$param_datum = $_GET["pickeddate"];

//hier die neue sql ?pickeddate=2013-01-09
$query = "SELECT dateid, date, min(temp) as minimum  FROM $tableName WHERE date = '$param_datum' GROUP BY dateid ORDER BY dateid ";
$result = mysql_query($query);

$linecounter = 0; //counter initialisieren


// ab hier wird jeder datensatz einzeln abgearbeitet
while($row = mysql_fetch_array($result))
{


$tempmin = ".$minimum.";

// und jetzt die amcharts datensatzzeile zusammenbauen und ausgeben, der erste datensatz wird ohne komma ausgegeben
    if ($linecounter == 0){
    echo  ".$tempmin.";}
    else{
    echo ".$tempmin.";
    }


$linecounter++; //counter raufzählen
//ende
}


?>


Leider kein Wert
Keine Quelltext Angabe


Das Ziel ist es aus Spalte 4 ((TEMP) in 1 min. Werten) ein Minimumwert (Minimumtemp wert) in vor angewähltem Zeitraum (Tag, (pickeddate)) zu ermitteln, und aus zu geben.

Nicht mal das bringe ich hin

Ein Weiteres Ziel ist es aus dem augewähltem Zeitraum die Spalte 1 (DATEID) auszulesen,
um dem dateid wert des Minimumtemp werts zu ermitteln und aus zu geben
(Siehe My SQL Bild im Anhang)

Vielen Dank für eure Hilfe im Voraus.
 

Anhänge

  • phpMyAdmin MySQL Tabelle.JPG
    phpMyAdmin MySQL Tabelle.JPG
    145,3 KB · Aufrufe: 21
Zuletzt bearbeitet:
Ich habs geschaft
Leider kann ich Datum und Zeiten der jeweiligen max und Werte noch nicht ermitteln

Hat jemand eine Idee?


Der funktionierende Code Soweit

PHP:
<?php

//Datenbank Verbindung
$link = mysqli_connect("hostname", "xxxxxx", "xxxxxx", "xxxxxxx");

//die html parameter in variablen speichern
$param_datum = $_GET["pickeddate"];


//Query 1: Datenbank Abfrage zum Werte Berechnen (max/min/avg/sum etc.)
$query1 = "
SELECT
    DATE(date) AS d,
    MAX(temp) AS tMax
 
FROM wswinbasisdatena
WHERE date = '$param_datum'
ORDER BY d  DESC
LIMIT 1
";

//Query ausführen
$result = mysqli_query($link,$query1);

//Zeilen Ausgeben
while($row = mysqli_fetch_array($result))
{
    echo "Datum: ".$row[d]." Max. Temp: ".$row[tMax]."<br>";
}

//php end
?>



Danke soweit
 
Zuletzt bearbeitet:
IOch bin grad nicht mehr aktiv in PHP unterwegs. Aber sollten die Keys zum Array nicht als String übergeben werden?
PHP:
$row['tMax']

Des weiteren versteh ich deine aktuelle Frage nicht.

Dein SQL taugt aber auch nix. Du Filterst nach einem Datum und gibst dann das MAX() desselben Datums aus. Ergo ist $row['tMax'] identisch mit $param_datum.
 

Neue Beiträge

Zurück