테이블의 값을 변경하기 위해 MySQL에서 이벤트를 만들고 싶습니다. 이 이벤트는 날짜 (특히 TIMESTAMP 필드의 TIME() 부분)가 현재 날짜보다 많은지 여부를 확인합니다. 분명히 'active'라는 테이블에 time_stamp
과 active
열이 있습니다. 이것은 내가 지금까지 내가 본대로MySQL 이벤트를 사용하여 값 업데이트
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은 (시간은 (@active)) (15) (제공 I로 시작하는 회귀 계수처럼 보이는 작품 'time_stamp'필드를 올바르게 업데이트했습니다.)
의도 된 동작은 TIME_TO_SEC (TIME (@active))가 0에 도달하면 UPDATE 쿼리가 '활성'필드의 값을 1에서 0 (기본값은 1)으로 변경한다는 것입니다. 그러나 아무 것도하지 않습니다.
업데이트 : : 정확히 말하면 TIME_TO_SEC (TIME (@active))가 여전히 양수일 때 값을 0으로 변경하는 경우가 있습니다.
두 번째 업데이트 : 나는 최근에이 일을 시도 :
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;
중 하나가 작동하지 않았다.
세 번째 업데이트 : 예상대로 작동하지 않더라도 Adam과 내가 제안한 것을 사용했습니다. 이벤트를 시작한 후 확실히 '활성'값이 0으로 변경됩니다. 아이디어?
해결 : 의도 한대로 작동
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
: 아담 덕분에, 나는 IF 문을 사용하여 자신의 코드를 사용했다. 그래도 그의 제안이 효과가 없었던 이유는 아닙니다.
어디에서 실수 했습니까?
물론이 기능을 사용하기위한 또 다른 방법은 크게 감사하겠습니다.
미리 감사드립니다.
답변 해 주셔서 감사합니다. active.time_stamp 값은 일반적인 TIMESTAMP 값입니다 (예 : 2011-02-24 00:09:06). 나는 쿼리의 단순화를 좋아하지만 작동하지 않습니다. 두 번째 미리보기가 작동했습니다. 그건 그렇고, TIMESTAMP() 값을 이미 TIMESTAMP 경우에도 나는 (예를 들어 @time) 변수를 설정할 때, 형식을 유지하지 않았다; 대신 문자로 된 긴 자릿수를 보여주었습니다. 더 이상의 아이디어? –
관련성이있는 경우를 대비하여 localhost를 사용하고 있습니다. 그건 그렇고, 당신이 "UP ** Active ** AS ** t"를 의미한다고 생각합니다. –
당신의 대답을 받아 들였습니다. 그러나 나는 문제의 편집으로 작업 해결책을 게시했습니다 :-) –