PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mySQL - Trigger? Procedure? hmmm



GrazerTourer
05-11-2015, 16:01
Hi,

Nachdem das bei mir alles bald 10 Jahre her ist und ich überhaupt nie was damit wirklich gemacht habe, außer im Studium zum Spaß, frage ich die Experten im Bikeboard. :)

Ich habe scn vor Längerem für meine Wetterstation eine Datenbank gemacht, wo ich minütlich Daten hinein schreibe. Nun habe ich einen Sensor, der mir einen bestimmten Wert liefert (einen Helligkeitswert).

Beim Insert (und auch beim Update) eines Datensatzes, soll nun geprüft werden wie hoch der einzufügende Wert ist. Ist er zB größer gleich 50, soll in einer zusätzlichen Spalte 1 stehen, ansonsten 0. 1 bedeutet in dem Fall, dass die Sonne scheint, 0 das Gegenteil. So könnte ich sehr einfach über das Aufsummieren der 1er die Sonnenminuten/Stunden eines Zeitraums berechnen.

Wie macht man denn heutzutage so etwas richtig? Ich will den Wert definitiv erst beim Einfügen in die Tabelle errechnen und nicht schon mit übergeben.

Oder soll ich mir eine View erstellen? Das hab ich aber überhaupt noch nie gemacht... :)

Danke :)

stefan_m
05-11-2015, 16:36
Hallo,

Also ich würds mit if/else procedure im mySQL machen (wenn ich deine Aufgabenstellung richtig verstanden habe) siehe hier (https://dev.mysql.com/doc/refman/5.7/en/if.html)
allerdings würd ich sowas nicht direkt im mySQL machen.

dg86
05-11-2015, 16:38
Servus,

wenn du dir die frei verfügbare MySQL Workbench anlachst (download from: https://www.mysql.de/products/workbench/ and install), erstellst dir eine DB-Connection, verbindest dich auf die DB, wählst die Tabelle aus, Rechtsklick Alter Table.

Dann im Tab "Trigger" und baust dir einen -- Before Insert Trigger zusammen.

Welche MySQL Server Version hastn?
Für 5.7 (aktuellste) findest du die Anleitung hier: https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
Bspw. für 5.5 einfach die Version in der Url ändern: https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

5.6, 5.1, 5.0

Ein Beispiel, wie's gehen könnte:
http://stackoverflow.com/questions/12836270/mysql-trigger-before-insert-value-checking


CREATE TRIGGER myTrigger BEFORE INSERT ON table
FOR EACH ROW BEGIN
IF (NEW.value > 50)
INSERT INTO table SET additionalvalue ="1";
END IF;
END

Sollte so irgendwie machbar sein...

GrazerTourer
05-11-2015, 19:36
Cool, danke! Version muss ich navhschauen. Bin gerade an keinem PC.*

Also ist der weg mit dem Trigger der richtige? Ich weiß ja nicht, was es da seit 10 Jahren alles Neues gibt. :)

Ich geh das morgen Abend an! Melde mich ob's klappt. :)

GrazerTourer
05-11-2015, 19:50
Hallo,

Also ich würds mit if/else procedure im mySQL machen (wenn ich deine Aufgabenstellung richtig verstanden habe) siehe hier (https://dev.mysql.com/doc/refman/5.7/en/if.html)
allerdings würd ich sowas nicht direkt im mySQL machen.

Ich möchte es quasi direkt in MySQL machen, weil ich den Text String den mir die Wetterstation ausgibt nicht zu sehr vorab bearbeiten will. Das bedeutet alles Rechenleistung direkt am Raspberry, der eh schon recht viel zu tun hat mit Backup, Webcam, usw usf. Insofern ist es mir lieber, wenn ich die Daten weiterhin einfach als CSV zum Server schicke und ich dort den Rest mache. Natürlich könnte iches auch dort mit PHP machen, aber da bin ich noch dümmer. Ich kann PHP nicht wirklich, bzw. Nur ein bisserl und zum Debuggen hab ich da einfach nix ordentliches.

stefan_m
05-11-2015, 20:37
PHP debuggen spielts auch eigentlich nicht so wirklich! Aber generell sollte es mMn via PHP einfacher sein :)