Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trigger dodający rekordy kiedy jest robiony update
Forum PHP.pl > Forum > Bazy danych > MySQL
rad11
Nie wiem czemu ale mając np taką strukture:

  1. CREATE TABLE `citizenships` (
  2. `id_citizenships` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `citizenships_name` VARCHAR(255) NOT NULL,
  4. `created_at` TIMESTAMP NULL DEFAULT NULL,
  5. `updated_at` TIMESTAMP NULL DEFAULT NULL,
  6. `deleted_at` TIMESTAMP NULL DEFAULT NULL,
  7. PRIMARY KEY (`id_citizenships`)
  8. )
  9. COLLATE='utf8_general_ci'
  10. ENGINE=InnoDB
  11. AUTO_INCREMENT=9
  12. ;


i wywołując taki trigger:

  1. BEGIN
  2.  
  3. IF (@user_id IS NULL ) THEN
  4. SET @user_id=0;
  5. END IF;
  6.  
  7. IF OLD.citizenships_name <> NEW.citizenships_name THEN
  8. INSERT INTO logs (user_id,object,object_field,object_id,new_value,old_value,message,STATUS,date) VALUES (@user_id,'citizenships','citizenships_name',OLD.id_citizenships,NEW.citizenships_name,OLD.citizenships_name,'Zmieniono nazw obywatelstwa','updated',NOW());
  9. END IF;
  10.  
  11. IF OLD.created_at <> NEW.created_at THEN
  12. INSERT INTO logs (user_id,object,object_field,object_id,new_value,old_value,message,STATUS,date) VALUES (@user_id,'citizenships','created_at',OLD.id_citizenships,NEW.created_at,OLD.created_at,'Zmieniono date dodania','updated',NOW());
  13. END IF;
  14.  
  15. IF OLD.updated_at <> NEW.updated_at THEN
  16. INSERT INTO logs (user_id,object,object_field,object_id,new_value,old_value,message,STATUS,date) VALUES (@user_id,'citizenships','updated_at',OLD.id_citizenships,NEW.updated_at,OLD.updated_at,'Zmieniono date aktualizacji','updated',NOW());
  17. END IF;
  18.  
  19. IF OLD.deleted_at <> NEW.deleted_at THEN
  20. INSERT INTO logs (user_id,object,object_field,object_id,new_value,old_value,message,STATUS,date) VALUES (@user_id,'citizenships','deleted_at',OLD.id_citizenships,NEW.deleted_at,OLD.deleted_at,'Zmieniono date usuniecia / usunieto rekANDd','updated',NOW());
  21. END IF;
  22.  
  23. END



Rekordy nie są dodawane do tabeli logs kiedy zmienane są wartości z NULL na timestamp. Jak już pole ma ustawiony timestamp i zmieniamy np o 1 minute do przodu itd. to rekordy się dodają ocb?
mmmmmmm
O warunku NULL<>'coś' nie możesz powiedzieć ani że jest prawdziwy, ani że jest fałszywy. Jest Null.
Zamień na np.
IF Coalesce(OLD.deleted_at, '2016-01-01')<>Coalesce(NEW.deleted_at, now()) THEN
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.