Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Trigger dodający rekordy kiedy jest robiony update
rad11
post 6.05.2016, 11:54:51
Post #1





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?

Ten post edytował rad11 6.05.2016, 11:58:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
mmmmmmm
post 6.05.2016, 17:07:35
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 23:22