www.mikrocontroller.net

Forum: PC-Programmierung Trigger in Mysql


Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Emperor_L0ser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin,
also dein erster denkfehler liegt im board, was hat das ganze mit 
mikrocontrollern und elektronik zu tun?

Autor: Clifford (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Innerhalb von Triggern kann man nicht mit SELECT, INSERT, UPDATE usw 
nicht auf die Datenbank zugreifen

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich dich verstehe soll nur der neue Eintrag geändert werden, dann 
halte ich das hier für besser:

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

Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes P. (jope)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte versucht den selben Trigger noch mal anzulegen... aber es gibt 
immer noch Syntax Probleme...

Es kann doch nicht so schwer sein, oder verstehe ich noch was falsch? 
Wer mal das Manual weiter wälzen...

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100, new.Luftfeuchte = 
new.Luftfeuchte / 100

Wenn du mehrere Statements verwenden willst musst du mit BEGIN/END 
arbeiten.

Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Msp 430_crew (msp430_crew)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.