2010-11-29 4 views
1

In meiner Datenbanktabelle habe ich ein DATETIME-Feld namens 'start_datetime'.Abrufen einer Liste von Datensätzen basierend auf Zeitintervallen (PHP/MySQL)

Der Zeitteil wird immer basierend auf 5-Minuten-Intervallen gespeichert, ohne Sekunden, zum Beispiel: 15.25.00 oder 12.10.00 oder 17.30.00

Jetzt muss ich einrichten eine CRON-Aufgabe, die genau 2 Tage vor 'start_datetime' eine E-Mail versendet.

Es gibt ein paar Probleme hier:

1) Zunächst einmal muss ich alle Datensätze mit einem ‚start_datetime‘ finden, die genau vor JETZT 2 Tage ist (dh der Zeitpunkt der Abfrage ausgeführt wird)

2) Es sollte alle Datensätze ignorieren, die mehr als oder weniger als 2 Tage entfernt sind. Wenn man bedenkt, dass die Zeiten auf Intervallen von 5 Minuten basieren, kann ich nur annehmen, dass die CRON-Aufgabe alle 5 Minuten ausgeführt werden müsste? Dies könnte ein Problem sein, da mein Hosting-Provider nur erlaubt, dass ein CRON einmal pro Stunde max.

Also, was ist der beste Weg, um dies zu nähern?

Antwort

1

Ist es wirklich so wichtig, dass es bis auf das 5-Minuten-Intervall genau zu sein, oder wäre es akzeptabel, dass senden E-Mail bis zu 55 Minuten früher?

Wenn dies der Fall ist, können Sie eine Abfrage ausführen, die alle Datensätze auswählt, die diese 2-Tage-Marke innerhalb der nächsten Stunde erreichen.

Abfrage würde wie folgt aussehen: (quick n schmutzig, nicht getestet)

SELECT * FROM table 
    WHERE CURRENT_TIMESTAMP >= DATESUB(startDate, INTERVAL 49 HOUR) 
    AND CURRENT_TIMESTAMP < DATESUB(startDate, INTERVAL 48 HOUR); 
+0

Lol guten Punkt! Ich denke nicht, dass es wichtig wäre, ehrlich zu sein! Also, was wäre die SQL-Abfrage dafür? – GSTAR

+1

Aktualisierte Antwort mit Codebeispiel :) –

0

Da Sie den Cron nur einmal pro Stunde ausführen können, besteht die einzige Option darin, E-Mails für die ausgewählten Werte zu senden. WHERE start_datetime ist BETWEEN 2 Tage und 2 Tage und 1 Stunde oder Sie können einen Webdienst einrichten würde alle 5 Minuten von deinem eigenen PC mit einem Cron angerufen werden, aber es wird nicht empfohlen.

0

Wird Ihr Provider unbegrenzte Script-Ausführungszeit erlauben? Wenn dies der Fall ist, können Sie ein Skript erstellen, das die Datenbank alle fünf Minuten über die Schlaffunktion abfragt.

Funktion:

http://php.net/manual/en/function.sleep.php

Pseudo-Code:

function query_db() { 
    //query code 
} 

for($i = 1; $i <= 60; $i++) { 
    query_db(); 
    sleep(300); 
}