Tutorial - Wetterdaten Diagramme mit amcharts - Teil 3.1 - Datenbank Trennkomma

Teil 3.1 - Datenbank - Trennkomma


Achtung: Neue und aktualisierte Versionen der Tutorials finden Sie hier:

http://www.pscl.ch


Wie bereits erwähnt, sollte das letzte Trennkomma der Zeilen im Datenbereich des Diagramms, nicht ausgegeben werden.


1. Das Problem umkehren


Zur besseren Übersicht nehme ich das Komma mal in ein eigenes echo:

echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";

echo ",";

Nach der letzten Zeile soll dieses Komma nun nicht mehr ausgegeben werden.
Die erste Zeile ist aber einfacher zu erkennen als die letzte. Daher nehme ich zuerst das echo mit Trennkomma  nach vorne. 

echo ",";

echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";

Die neue Ausgabe wäre dann:

,{date: new Date(2013,10,25,0,0),t:1.1,h:82.0,p:1030.9,ws:2.7,wd:315.0,r:0.000,rs:0,wg:2.6,dp:-1.6,t2:3.1}
,{date: new Date(2013,10,25,0,5),t:1.1,h:81.0,p:1030.9,ws:2.3,wd:337.0,r:0.000,rs:0,wg:2.7,dp:-1.8,t2:3.1}

Nun muss also das erste Komma weg und nicht mehr das letzte. Das macht die Sache um vieles einfacher ;)


2. Variable


Nun müssen die Zeilen "unterscheidbar" gemacht werden. Ich verwende dazu eine Variable ($zeilenzaehler) welche sich nach dem ersten Durchlauf verändert.

Noch bevor die Ausgabe beginnt, eine Variable definieren.
$zeilenzaehler = 1;

Nach der ersten Zeilenausgabe mit echo wird dann die Variable geändert.
$zeilenzaehler = 2;

Bei der ersten Zeile ist die Variable noch "1", bei der zweiten dann "2".


3. Echo mit "If"


Mit einer "If" Funktion gebe ich nun das Komma nur dann aus, wenn die Variable $zeilenzaehler nicht "1" ist.
(Zur Erinnerung: Das Komma ist ja jetzt vor jeder Datenzeile. Dieses soll also nur ausgegeben werden, wenn es nicht die erste Zeile ist)

Zuerst mit "If" die Variable überprüfen. Solange $seitenzähler 1 ist, wird das folgende echo (mit dem komma) nicht ausgeführt:
if ($zeilenzaehler != 1)
{
   echo ",";
}
Im ersten Durchlauf ist $seitenzähler noch 1. Das echo mit dem Komma wird also nicht ausgeführt.


Dann das echo mit der Datenzeile: (wird in jedem Durchlauf ausgegeben)
echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";

Und jetzt, nachdem die erste Zeile (ohne Komma) bereits ausgegeben wurde, die Variable auf "2" ändern.
$zeilenzaehler = 2;

Bei allen weiteren Durchläufen ist die Variable nun 2. Die "Bedingung" der "If" Frage oben, ist also ab jetzt immer "wahr", und das Komma kommt nun vor jeder weiteren Datenzeile.


4. Zusammenfassung:


Hier noch das ganze php Script:

<?php

//db verbindung

mysql_connect("Hostname", "Username","Password");
mysql_select_db("Database Name");


//db abfrage

$query = "
SELECT YEAR(datetime) AS dy, MONTH(datetime) -1 AS dm, DAY(datetime) AS dd, HOUR(datetime) AS th, MINUTE(datetime) AS tm, temp, hum, pressure

FROM wettertabelle

WHERE DATE(datetime) = '2013-11-25'

ORDER BY datetime
";

// NEU: Variable definieren
$zeilenzaehler = 1;


//ausgabe der zeilen

$result = mysql_query($query)
OR die("Error: $query <br>".mysql_error());

while($row = mysql_fetch_array($result))
{


// echo

if ($zeilenzaehler != 1)
{
echo ",";
}

echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";

//Variable jetzt auf 2
$zeilenzaehler = 2;

};


Man kann das ganze selbstverständlich noch abkürzen, optimieren oder auch komplett anders machen ;)


1 Kommentar:

  1. So würde ich das letzte komme entfernen.

    $linecounter = 1; //counter initialisieren
    .
    .
    .
    if ($linecounter == 1){
    echo "{date: new Date($jahr, $monat, $tag, $stunde, $minute, 0, 0), val1:".$row['temp'].", val2:".$row['hum'].", val3:".$row['pressure'].", val4:".$row['wind'].", val5:".$row['winddir'].", val6:".$regenmesser.", val7:".$row['windb'].", val8:".$row['dew'].", val9:".$row['windchill'].", val10:".$row['solar'].", val11:".$row['uv'].", val12:".$row['sonnenschein'].", val13:".$row['snow'].",val16:".$row['regenrate'].",val14:".$row['nullgradgrenze']."}";
    }
    else{
    echo ",\n{date: new Date($jahr, $monat, $tag, $stunde, $minute, 0, 0), val1:".$row['temp'].", val2:".$row['hum'].", val3:".$row['pressure'].", val4:".$row['wind'].", val5:".$row['winddir'].", val6:".$regenmesser.", val7:".$row['windb'].", val8:".$row['dew'].", val9:".$row['windchill'].", val10:".$row['solar'].", val11:".$row['uv'].", val12:".$row['sonnenschein'].", val13:".$row['snow'].",val16:".$row['regenrate'].",val14:".$row['nullgradgrenze']."}";
    }


    $linecounter++; //counter raufzählen

    AntwortenLöschen