Autor Zpráva
Michal5
Profil *
Caute, mam dve tabulky,
tabulka1 obsahuje id, flag
tabulka2 obsahuje id, datum, zmena

Potreboval by som pomocou triggra menit zmenu, ak by v tabulke 1 sa zmenil flag z 0 na 1 tak sa automaticky v tabulke2 nastavi aktualny datum v zmen. Vedel by mi niekto helfnut?
Kajman
Profil
V jaké databázi?
Michal5
Profil *
mysql, sorry ze som neuviedol
Kajman
Profil
Bude to něco jako
CREATE TRIGGER tr_tabulka1_au AFTER UPDATE ON tabulka1
FOR EACH ROW
BEGIN
  IF OLD.flag=0 AND NEW.flag=1 THEN
    UPDATE tabulka2 SET zmena=Now() WHERE id=NEW.id;
  END IF;
END;

Pokud nepoužíváte klienta s podporou triggerů, tak si nezapomeňte změnit delimiter.
Michal5
Profil *
ok diky :)


a este jedna otazka, ak by som chcel aby sa zmena zmenila aj v pripade zmeny datumu kde by bola tiez 0 a ak by sa tam zmenila hodnota na 1, tak aby sa aktualizoval stlpec zmena? skusam to nejako podla tejto tvojej predlohy ale vzdy mi to hodi chybu pri zmene z 0 na 1


moja chyba, zle som nazval zmenu :) takze ide mi aj ta druha vec, vdaka este raz


tak som myslel ze je len v tom chyba, ale nie, dostanem vypis:

#1442 - Can't update table 'tabulka2' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Kajman
Profil
Pokud ten druhý trigger dáváte na tabulka2, tak ho udělejte jako
BEFORE UPDATE
a nedělejte update, ale jen změnte hodnotu sloupce aktuálního řádku, tedy
SET NEW.zmena=Now();
Michal5
Profil *
to som aj chcel skusit len som myslel ze to bude blbost :-) a ono to funguje, diky este raz
Michal5
Profil *
Este by som chcel otravit s jednou vecou, to sa mi tiez nejako nedari kedze su triggre pre mna nove.

Mam tabulku a v nej stlpec flag ktory ma default 1 a chcel by som aby sa aktualizoval datum ak sa vlozi defaultna hodnota, ak sa vlozi 0 tak sa stlpec datum nenastavi na NOW(), ak ale sa casom stlpec flag zmeni na 1 tak nech sa zas aktualizije cas v stlpci datum.

Pri tom tiez before update? lebo som to spravil takto:

BEGIN
IF OLD.flag=0 AND NEW.flag=1 THEN
SET NEW.datum=NOW();
END IF;
IF NEW.flag=1 THEN
SET NEW.datum=NOW();
END IF;
END

je to before update a nemozem ani zaznam vlozit, neviem co robim zle
Kajman
Profil
Udělejte dva triggery, jeden before update a jeden before insert.

Při insertu si nejsem jistý, jestli bude v new.flag již 1 podle defaultu, nebo null hodnota. To si musíte ověřit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0