Update Wert unter Verwendung von MySQL Veranstaltungen

Möchte ich eine Veranstaltung erstellen in MySQL, um die zu ändern einen Wert in einer Tabelle. Das Ereignis überprüft, ob ein Datum (besonders in der TIME () - Teil einer TIMESTAMP-Feld) ist mehr als das aktuelle Datum. Offensichtlich, ich habe eine time_stamp und ein active Spalte in einer Tabelle mit dem Namen 'active'. Dies ist, was ich haben

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;

Soweit ich gesehen habe, die SELECT-Teil mit den Variablen funktioniert, ist, dass TIME_TO_SEC(TIME(@active)) sieht aus wie eine regressive count ab 15 (vorausgesetzt, ich aktualisiert die 'time_stamp' Feld richtig).

Das beabsichtigte Verhalten ist, dass, wenn TIME_TO_SEC(TIME(@active)) den Wert 0 erreichen, wird der UPDATE-query würde ändern Sie den Wert der "aktiv" - Feld von 1 auf 0 (der default-Wert ist 1). Jedoch, es tut nichts.

UPDATE: um genau Zu sein, manchmal ist es ändert den Wert auf 0, aber wenn TIME_TO_SEC(TIME(@active)) ist immer noch positiv.

ZWEITE UPDATE: ich habe vor kurzem versucht, dieses:

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;

das hat nicht funktioniert entweder.

DRITTE UPDATE: ich habe die Anregung von Adam und ich, auch wenn es nicht wie erwartet funktioniert, ist es sicherlich, ändert sich der Wert "aktiv" auf 0, sofort, nachdem ich Anfang der Veranstaltung. Ideen?

LÖSUNG: vielen Dank an Adam, die ich verwendet, seinen code mit einer IF-Anweisung:

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

denen es funktioniert wie vorgesehen. Ich weiß nicht, warum sein Vorschlag nicht funktionieren, obwohl.


Wo habe ich einen Fehler gemacht?

Natürlich ein anderer Ansatz, um diese Funktionalität würde sehr geschätzt werden.

Vielen Dank im Voraus.

InformationsquelleAutor Robert Smith | 2011-02-24
Schreibe einen Kommentar