2017-07-07 20 views
0

Ich versuche, ein Ereignis zu machen, das alle 1 Stunde ausgeführt wird.So planen Sie Ereignisse mit msql

Hier ist der Code.

mysql> DROP EVENT IF EXISTS `clean`; 

CREATE EVENT IF NOT EXISTS `clean` 
     ON SCHEDULE 
     EVERY 1 HOUR 
     STARTS '2017-07-07 16:00.00' 
     DO 
      SET @isTime = IF(table_name.programed_time = NOW(), 'y', 'n'); 
      IF @isTime = 'y' THEN DELETE FROM `cell_name` 
      WHERE `cell_name` = 'value' 

Ich möchte, dass die Veranstaltung nur montags um 16:00 Uhr stattfindet. Also in meiner App habe ich den Code, um das Datum von jedem 1. Montag eines jeden Monats um 16:00 Uhr in einer Tabelle zu speichern.

Aber ich habe diesen Fehler, wenn ich diese Abfrage ausführen.

Unknown type of declaration near to IF. 
Something is wrong in its syntax near 'IF @isTime ='y' 
THEN DELETE FROM `cell_name` WHERE `cell_name 'in the line 

Jemand könnte mir sagen, was ich falsch mache.

+0

Sie müssen über Trigger in Mysql lesen –

+0

Keine solche Sache in MySQL. –

+0

@SloanThrasher Was gibt es nicht? MySQL hat seit einiger Zeit Auslöser und Ereignisse. – Uueerdo

Antwort

1

Die Planung von Ereignissen in mysql beinhaltet, dass Sie verstehen, wie Trigger funktionieren. Schauen Sie sich dieses detaillierte Tutorial an und ich glaube, es würde einen langen Weg zurücklegen. https://www.sitepoint.com/how-to-create-mysql-events/

Alternativ

auf Ihre Frage Basierend Ich glaube wirklich, dass cronjob am besten für Ihre Bedürfnisse geeignet ist. Schaut euch diesen Artikel an. https://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

+0

Danke für Ihre Tipps. –

1

Da Ihre Veranstaltung mehr als eine Anweisung hat, ist das Problem wahrscheinlich, dass Sie die Definition, so etwas konvertieren müssen:

DELIMITER $$ 
CREATE EVENT IF NOT EXISTS `clean` ON SCHEDULE EVERY 1 HOUR STARTS '2017-07-07 16:00.00' 
DO 
BEGIN 
    DECLARE isTime CHAR(1); 
    SET isTime := IF(table_name.programed_time = NOW(), 'y', 'n'); 
    IF isTime = 'y' THEN 
     DELETE FROM `cell_name` WHERE `cell_name` = 'value'; 
    END IF; 
END$$ 

DELIMITER ; 

Grundsätzlich umschließen den Körper in BEGIN... END

+0

2 Fehler wurden während der Analyse gefunden. Art des Datums unbekannt. (Nahe "IF" an Position 171) Art des Datums unbekannt. (Nahe "END" an Position 255) Ich habe eine Syntaxfehler. –

+0

Ja, deshalb habe ich "so etwas wie" gesagt ... Ich habe mit Ereignissen SEHR wenig gearbeitet, aber erinnere dich daran, dass sie ähnlich wie Routinen und Auslöser deklarieren. – Uueerdo

+1

Sie könnten auch versuchen, eine lokale Variable anstelle der Variablen für die Sitzung (@ Präfix) zu verwenden. – Uueerdo

0

gefunden der beste Weg, um zu tun, was ich will, ohne Variablen zu erstellen oder das Datum in der Datenbank zu speichern.

Hier ist der Code, den ich verwende.

DROP EVENT IF EXISTS `clean`; 

DELIMITER // 

CREATE EVENT IF NOT EXISTS `clean` 
     ON SCHEDULE 
     EVERY 1 DAY 
     STARTS '2017-01-27 16:00.00' 
     COMMENT 'EVENT runs daily at 4 pm. DELETE executed first Monday month' 
     DO 
      BEGIN 
      IF (DAYOFMONTH(NOW()) BETWEEN 1 AND 7 AND 
       DAYNAME(NOW()) = 'Monday') THEN 
       DELETE FROM `table_name` 
       WHERE `cell_name` = 'value'; 
      END IF; 
      END// 

DELIMITER ;