Trigger in Mysql

#610215
Lesenswert?

HalLo Leute,
ich möchte in Mysql einen Trigger einrichten, der bei einem neuen 
Eintrag in die DB, jeden Wert dieser Zeile durch 10 teilt und dann die 
Spalten wieder mit den Wert/10 füllt.

Ich habe hier mal einen Ansatz:

TRIGGER
 Testtrigger
AFTER INSERT ON
 wetterdaten
FOR EACH ROW BEGIN
 UPDATE wetterdaten SET `Lufttemperatur` = `Lufttemperatur`/10 WHERE (ID 
= MAX(ID));
END

Wo liegt denn mein Denkfehler?

Peter
#610261
Lesenswert?

Hallo freddy436,
ja das habe ich gesucht. Danke Dir.
Eine Frage habe ich aber noch, woher weiß man sowas? Ich habe gestern 
nur sehr wenig dazu gefunden und habe bestimmt 5h gegoogelt!
Kannst Du mir vielleicht ne gute Seite dazu nennen oder ne 
Buchempfehlung?

Wünsche ein schönes Wochenende.

Peter
#610271
Lesenswert?

In meinen Augen reicht die offizielle MySQL Referenz/Dokumentation 
völlig aus, mehr habe ich eigentlich nie gebraucht.

Ich habe nie ein Buch oder ähnliches über SQL gelesen. Ich fange auch 
erst jetzt mit einem Informatik Studium an. Meine SQL Kenntnisse sind 
eigentlich alle ein Nebenprodukt des PHP Lernens und einigen Projekten.
Ich bin sicherlich kein Profi, würde mich als Fortgeschritten 
eingestufft.
Gerade bei so nicht alltäglichen Sachen gucke ich aber auch immer wieder 
gerne in die Referenz.
#610279
Lesenswert?

Habe jetzt mal versucht mehrere Spalten zu ändern...aber meine MYSQL 
Version 5.0.41 unterstützt keine multiple Triggers. In PHP würde ich 
einfach die verschiedenen Spaltenwerte asulesen, verändern und 
zurückschreiben mit einem Update Befehl. Aber mit MYSQL tue ich mich 
schwer. Wie kann man das umgehen?

CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100;
SET new.Luftfeuchte = new.Luftfeuchte / 100;

Peter
#610504
Lesenswert?

@freddy436
Also ich bin jetzt fast am Ziel, leider macht die IF Abfrage Probleme, 
vielleicht hast Du ja noch eine Idee & Danke für deine Bemühungen :-)

CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100,
@Lufttemp = new.Lufttemperatur,
new.Luftfeuchte = new.Luftfeuchte / 100,
new.Luftdruck = new.Luftdruck / 100,
new.Windgeschwindigkeit = new.Windgeschwindigkeit / 100,
@Windgeschw = new.Windgeschwindigkeit,
new.Helligkeit = new.Helligkeit / 100,
new.Windchill = ROUND(13.12 + 0.6215 * @Lufttemp - 11.37 * 
POW(@Windgeschw,0.16) + 0.3965 * @Lufttemp * POW(@Windgeschw,0.16),2),
IF (@Windgeschw > 5,new.Windchill,new.Windchill = @Lufttemp)
#610521
Lesenswert?

ich vermute mal du suchst das hier:

...,
new.Windchill = IF (@Windgeschw > 5,new.Windchill,@Lufttemp)

Wenn du mal gezwungen wurdest mit Excel zu arbeiten, das SQL IF kann man 
mit dem Excel IF/WENN vergleichen ;)

Das da sieht für mich danach aus als wenn du von irgendjemand gezwungen 
wirst das mit TRIGGERN zu machen, liege ich da richtig?

Ansonsten würde es vermutlich deutlich mehr Sinn machen das direkt im 
Client Programm zu machen ;)
#610770
Lesenswert?

Danke nochmal,
funzt alles jetzt prima.
Mit der wenn /dann Funktion in Excel hatte ich auch schon mal Probleme 
;-).

Ja, mich zwingt der Apache dazu...ich lese lese über ein shell Script 
Daten in die DB. Da ich mit Linux sehr wenig zu tun hab, mach ichs 
lieber mit dem Trigger.

Gruß Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren