Autor | Zpráva | ||
---|---|---|---|
Michal5 Profil * |
#1 · Zasláno: 17. 6. 2015, 12:57:49
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 |
#2 · Zasláno: 17. 6. 2015, 13:14:20
V jaké databázi?
|
||
Michal5 Profil * |
#3 · Zasláno: 17. 6. 2015, 13:15:53
mysql, sorry ze som neuviedol
|
||
Kajman Profil |
#4 · Zasláno: 17. 6. 2015, 14:14:59
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 * |
#5 · Zasláno: 17. 6. 2015, 14:32:41 · Upravil/a: Michal5
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 |
#6 · Zasláno: 17. 6. 2015, 15:00:11
Pokud ten druhý trigger dáváte na tabulka2, tak ho udělejte jako
BEFORE UPDATE SET NEW.zmena=Now(); |
||
Michal5 Profil * |
#7 · Zasláno: 17. 6. 2015, 15:03:10
to som aj chcel skusit len som myslel ze to bude blbost :-) a ono to funguje, diky este raz
|
||
Michal5 Profil * |
#8 · Zasláno: 18. 6. 2015, 15:24:38
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 |
#9 · Zasláno: 18. 6. 2015, 16:13:47
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. |
||
Časová prodleva: 9 let
|
0