Я хотел бы создать событие в MySQL, чтобы изменить значение в таблице.Событие проверяет, больше ли дата (в частности, часть TIME () поля TIMESTAMP), чем текущая дата.Очевидно, у меня есть столбец time_stamp
и active
в таблице с именем 'active'.Вот что у меня
CREATE EVENT update_status
ON SCHEDULE EVERY 2 SECOND
DO
SELECT @time:= time_stamp FROM active WHERE user_id = 1;
SELECT @time2:= TIMESTAMP(@time);
SELECT @active:=TIMEDIFF(@time2,DATE_ADD(NOW(),INTERVAL -15 SECOND));
UPDATE active SET active=if(TIME_TO_SEC(TIME(@active))>=0,1,0) WHERE user_id=1;
Насколько я видел, часть SELECT с переменными работает нормально, то есть TIME_TO_SEC (TIME (@active)) выглядит как регрессивный счет, начинающийся с 15 (при условии, что я правильно обновил поле 'time_stamp').
Предполагается, что когда TIME_TO_SEC (TIME (@active)) достигнет 0, запрос UPDATE изменит значение поля «active» с 1 на 0 (значение по умолчанию - 1).Тем не менее, это ничего не делает.
ОБНОВЛЕНИЕ : Точнее, иногда оно меняет значение на 0, но когда TIME_TO_SEC (TIME (@active)) все еще положительный.
ВТОРОЕ ОБНОВЛЕНИЕ : Я недавно попробовал это:
CREATE EVENT update_status
ON SCHEDULE EVERY 2 SECOND
DO
SELECT @time:= time_stamp FROM active WHERE user_id = 1;
SELECT @time2:= TIMESTAMP(@time);
SELECT @active:=TIMEDIFF(@time2,DATE_ADD(NOW(),INTERVAL -15 SECOND));
UPDATE active SET active=0 WHERE user_id=1 AND TIME_TO_SEC(TIME(@active))>=0;
, который тоже не работал.
ТРЕТЬЕ ОБНОВЛЕНИЕ : я использовал предложение Адама, и даже если оно не работает должным образом, оно, безусловно, меняет значение «активное» на 0 сразу после запуска события,Идеи?
РЕШЕНИЕ : Благодаря Адаму я использовал его код с выражением IF:
CREATE EVENT update_status
ON SCHEDULE EVERY 2 SECOND
Do
UPDATE active AS t
SET t.active=IF(TIME_TO_SEC(TIMEDIFF(
t.time_stamp, DATE_ADD(NOW(),
INTERVAL -15 SECOND)))>=0,1,0)
WHERE user_id=1
, которое работает как задумано.Я не понимаю, почему его предложение не сработало.
Где я допустил ошибку?
Конечно, был бы очень признателен другой способ получить эту функциональность.
Заранее спасибо.