• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

deamon für WS500 unter Linux

Begonnen von Django, 15.09.2006, 23:29:48

⏪ vorheriges - nächstes ⏩

PumpkinEater

Hallo zusammen,
ich habe noch mal eine Frage zur verwendeten Datenbankstruktur und zur MySQL-Abfrage der Daten: Die Wetterdaten werden ja in verschiedenen mysql-Tabellen gespeichert und nicht in einer zentralen. Wenn ich nun aber auf meiner Webseite eine Liste bestehend aus Zeit, Temperatur, Wind und Regen erstellen möchte, so muss ich eine SQL-Abfrage basteln, die parallel auf die verschiedenen DB-Tabellen zugreift. Als MySQL-Laie habe ich mal folgendes probiert:

$query = "SELECT DATE_FORMAT(th_sensors.datetime,'%e.%m.%Y') as  date,DATE_FORMAT(th_sensors.datetime,'%H:%i:%s') as time,th_sensors.T,th_sensors.H,th_sensors.sensid,th_sensors.ok, pressure.datetime, pressure.P, rain.diff
     FROM th_sensors, rain, pressure, wind
WHERE    th_sensors.datetime = pressure.datetime &&
        th_sensors.datetime = rain.datetime &&
        wind.datetime = pressure.datetime &&
        th_sensors.datetime >= \"$from_date\" AND  th_sensors.datetime <= \"$to_date 23:59:59\" AND  th_sensors.sensid = \"9\" AND th_sensors.ok = \"1\"";

Das funktioniert soweit ganz gut, ist aber aufwendig und etwas unübersichtlich. Außerdem werden nur dann Werte zurückgegeben, wenn für den Zeitpunkt in *allen* DB-Tabellen Einträge gespeichert werden. Wenn z.B. für einen Zeitpunkt kein Luftdruck-Wert vorliegt, gibt's dann auch keine Temperaturwerte für diese Zeit. Ich habe bereits versucht, in der Abfrage im "WHERE"-Teil die UND-Vernüpfungen herauszunehmen und nur noch das Zeitinvall bezogen auf die Tabelle th_sensors zu verwenden, was aber nicht funktioniert.

Frage zur Datenbankstruktur: Warum wird hier nicht nur eine zentrale Tabelle mit allen Wetterwerten verwendet? Welche Vorteile hat die Verwendung von mehreren Tabellen? Die Struktur ist ja hier im Forum abgestimmt worden. Ich vermute, dass es daher gute Gründe für diese Struktur gibt (cih möchte das Rad nicht neu erfinden und möglichst auf einen Quasi-Standard aufsetzen).
Kann man die obige SQL-Abfrage noch etwas besser schreiben?

Vielen Dank schon mal für Eure Tipps.

Gruß
Peter

hotmaz

Hi PumpkinEater,

Das Zauberwort für Dein Problem heißt Leftjoin oder Outerjoin, dass heisst, wenn du ein join über Tabelle A und B machst, die Abfrage auch dann antworten liefert, wenn zu einem Satz in A kein Satz in B enthalten ist.
Wie das in mySQL gemacht wird, weiß ich jetzt leider nicht.

Ich weiß nicht wie es jetzt ist, aber mySQL hatte früher massive Performanz-Probleme mit exzessive Join-Abragen.
Es spräche aber auch nichts dagegen das Skript so zu erweitern, dass neben der bisherigen Daten, redundant für Deine Zwecke eine Tabelle mit allen Daten in einer Reihe gefüllt wird.

Gruß,
Maz

hotmaz

Hi Django, Duffy, r_k,

weiß jemand, wie die Werte bei Wetterstatus auszuwerten sind?
Soweit ich die Diskussion überblicke, ist das ein Indikator für Wetterwilli.
Aber wie werte ich das für meine Anwendungen aus?

Gruß
Maz

DuffyDuc

Hi maz,

glaube trix hat das irgendwo ergründet.

Stefan

Django

Griasdebou!
Zitat von: "hotmaz"weiß jemand, wie die Werte bei Wetterstatus auszuwerten sind?
Nope, ich hatte das mal "erkannt" in den Datentelegrammen, jedoch nie weiter verfolgt. Und nun ohne eineWS500 kann ich da leider nix mehr zu beisteuern. Leider.
ZitatSoweit ich die Diskussion überblicke, ist das ein Indikator für Wetterwilli.
Richtig!
ZitatAber wie werte ich das für meine Anwendungen aus?
Na, im Zweifelsfalle, so wie ich es damals gemacht hatte, trial and error! ;)

Pfiade,
Django
:-x Nichts ist wahr, alles ist erlaubt!  :-x

Django

Griasdebou!

Zitat von: "PumpkinEater"Die Wetterdaten werden ja in verschiedenen mysql-Tabellen gespeichert und nicht in einer zentralen.
Richtig, der sogenannten Krinke'schen MySQL-Datenbankdefinitionstabelle[/b].

ZitatWenn ich nun aber auf meiner Webseite eine Liste bestehend aus Zeit, Temperatur, Wind und Regen erstellen möchte, so muss ich eine SQL-Abfrage basteln, die parallel auf die verschiedenen DB-Tabellen zugreift.
Jepp, soweit richtig erkannt. Das ist dann auch realtiv leicht gemacht, wenn man weiss wie's geht. ;)
ZitatFrage zur Datenbankstruktur: Warum wird hier nicht nur eine zentrale Tabelle mit allen Wetterwerten verwendet? Welche Vorteile hat die Verwendung von mehreren Tabellen?
Erste Frage: Ganz einfach, weil ich damals überzeugt wurde auf ein bereits existierenedes Schemata aufzusetzen um dann für die Visualisierung auf vorhandene Möglichkeiten aufsetzen zu können.
Zweite Frage: Nächste Frage. :lol: Nein, ich kann dann sehr einfach auf abgeschlossene Bereich zugreifen und diese Ändern und auch neue Datentabellen anfüren und das während des Betriebes ohne die bereits bestehende Tabelle anfassen zu müssen, wenn ich weitere Sensoren dazupacken will.
ZitatKann man die obige SQL-Abfrage noch etwas besser schreiben?
Mangels Daten in (m)einer Tabelle, versuche ich es mal etwas abstrakt zu formulieren. Doch zuvor eine kleine Bitte. Könntest Du mir mal einen kleinen Extrakt Deiner Datenbank zukommen lassen? So 1 Tag wär' O.K., Ich könnte dann ein wenig damit spielen - geht z.B. via PHPmyAdmin sehr einfach.

Aber nun zu meinem Versprechen:
SELECT a.speed, a.angle, b.sundur FROM wind a, wind b where a.stationid = b.stationid where datetime REGEXP '2009.';
Sollte Dir z.B. die Windgeschwindigkeit, Windrichtung und Sonnenscheindauer auswerfen, obwohl diese aus unterschiedlichen Tabellen kommen. Ist ein Wert davon = "0", dann wirft er entsprechen auch diese "0" aus. Soweit zur Theorie, habe hier keine Daten zum Testen; eventuell kannst Du mir aber mal ein paar exportieren und zukommen lassen, dann wird die Testerei einfacher.

Pfiade,
Django
:-x Nichts ist wahr, alles ist erlaubt!  :-x

PumpkinEater

Zitat von: "hotmaz"
Das Zauberwort für Dein Problem heißt Leftjoin oder Outerjoin, dass heisst, wenn du ein join über Tabelle A und B machst, die Abfrage auch dann antworten liefert, wenn zu einem Satz in A kein Satz in B enthalten ist.
Danke für den Tipp. Ich werde mich mal damit beschäftigen.
Gruß
Peter