2016-12-11 11 views
0

Ich habe Daten, die ständig eine MySQL-Datenbank füllen. Die letzte volle Viertelstunde Daten muss überprüft werden, wenn ein PHP-Skript ausgeführt wird. Versucht, MySQL mit etwas wie SEC_TO_TIME(FLOOR((TIME_TO_SEC(UTC_TIME())-450)DIV 900)*900) zu verwenden, da dies jedoch nicht weiß, wann eine neue Stunde gestartet wird, bricht es ab, wenn zwischen 0-15 Minuten gelaufen wird.Daten zwischen 15 und 30 Minuten abrufen

+---------------------+------------+ 
| date    | data | 
+---------------------+------------+ 
| 2016-12-10 17:35:03 | infos  | 
| 2016-12-10 17:55:03 | info0  | 
| 2016-12-10 18:00:01 | info1  | 
| 2016-12-10 18:04:00 | info2  | 
| 2016-12-10 18:13:10 | info3  | 
| 2016-12-10 18:16:30 | info4  | 
+---------------------+------------+ 

Was ich versuche auf der Grundlage der oben zu erreichen, wenn die Abfrage um 18:17 Uhr läuft, ist es, diese Zeilen, die seit der letzten vollständigen Viertelstunde bekommt war von 18.00 bis 18.15 Uhr:

| 2016-12-10 18:00:01 | info1  | 
| 2016-12-10 18:04:00 | info2  | 
| 2016-12-10 18:13:10 | info3  | 

Wenn die Abfrage um 18:05 Uhr läuft, erhält nur diese Zeile, weil die letzte volle Viertelstunde war von 17.45 bis 18.00 Uhr:

| 2016-12-10 17:55:03 | info0  | 

Antwort

1

ich glaube, Sie GROUP BY können in SQL um zu erreichen, was du bist e machen. Ich habe jedoch eine PHP-Code-Methode verwendet, die Sie in ein Objekt oder eine Methode einfügen können, um dasselbe zu erreichen.

# your driver and credentials 
$obj = new PDO(); 

# your sql query 
$stmp = ($obj->Prepare('SELECT * from table') 
    ->execute(); 

# loop through the results 
foreach($stmp->fetchAll() as $row) 
{ 
    # work out the difference between the entry timestamp and script execute timestamp 
    $time = strtotime(gmdate("H:i:s", strtotime($row[ 'column' ]))) - time(); 

    # compare database entry to pre-set entry 
    if(time() >= gmdate("H:i:s", 900)) 
    { 
     # 15 minutes has passed 
     echo $row[ 'column' ]; 
    } 
} 

Hoffe das half.

Verwandte Themen