Koledzy, chcę dokonywać wpisu do tabel sprawdzając wcześniej czy coś jest spoza zakresu zmiennej datetime.
Trigger / Wyzwalacz bazuje na porównaniu daty (dokładniej CONCATOwanej do DATETIME) wyciąganej z innej tabeli i sprawdzaniu warunku daty rzeczywistej NOW() z datą z bazy pomniejszonej o INTERVAL 10 minut. W zwykłym SELECT wszystko działa:
SET @eurodate=(SELECT CONCAT(date,' ',start_time) FROM at20_football_games WHERE id=1); SELECT IF( now() <= (@eurodate -INTERVAL 10 MINUTE),'GOT MUCH TIME','DENIED'); SET @eurodate=(SELECT CONCAT(date,' ',start_time) FROM at20_football_games WHERE id=1); SELECT IF( '2012-06-08 20:45:00' <= (@eurodate -INTERVAL 10 MINUTE),'GOT MUCH TIME','DENIED');
Natomiast ja chcę wyzwalacz (wiem, mogę przcież to po php zrobić ale uparłem się, że robię progress w MySQL i koniecznie chcę aby mieć to na TRIGGER'ze)

Oto "celownik":
CREATE TRIGGER euro2012_allow_10m_before BEFORE INSERT ON at20_football_votes FOR EACH ROW BEGIN SET @eurodate=(SELECT CONCAT(g.date,' ',g.start_time) FROM at20_football_games g WHERE g.id=NEW.gid); IF now()<=(@eurodate -INTERVAL 10 MINUTE) THEN INSERT INTO `at20_football_votes` (vid,gid,score1,score2,condition,processed,counted) VALUES (NEW.vid,NEW.gid,NEW.score1,NEW.score2,NEW.condition,NEW.processed,NEW.counted); END IF; END;
ERROR MESSAGE
CREATE TRIGGER euro2012_allow_10m_before BEFORE INSERT ON at20_football_votes FOR EACH ROW BEGIN SET @eurodate = ( SELECT CONCAT( g.date, ' ', g.start_time ) FROM at20_football_games g WHERE g.id = NEW.gid ) MySQL zwrócił komunikat: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
Dopiero zaczynam zabawę z MySQL'owym programowaniem tak więc proszę o wyrozumiałość i o hint'a, siedzę w http://forums.mysql.com oraz http://dev.mysql.com ale nie mogę póki co wyczaić co robię źle.
PS. Próbowałem z alliasmi jak i bez nich w przykładzie z SELECT do przykładu z TRIGGER bezskutecznie.
Pozdrawiam
http://www.daniweb.com/web-development/dat...-syntax-problem
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
Problemem był phpmyadmin oraz brak delimiter'a, shellem zadziałało, błędem było również tworzenie triggera before insert z insert co doprowadzało do pętlenia się i odrzucaniu wyzwalacza oraz niedopuszczanie do inserta, ostatecznie po zastosowaniu DELIMITER'a i odwróceniu warunku oraz użyciu SET wygląda to tak:
DELIMITER // CREATE TRIGGER euro2012_allow_10m_before BEFORE INSERT ON `at20_football_votes` FOR EACH ROW BEGIN DECLARE eurodate datetime; SET @eurodate=(SELECT CONCAT(g.date,' ',g.start_time) FROM at20_football_games g WHERE g.id=NEW.gid LIMIT 1); IF now()>(@eurodate - INTERVAL 10 MINUTE) THEN SET NEW.gid=0; SET NEW.vid=0; END IF; END; DELIMITER //;