2016-12-11 4 views
0

У меня есть данные, которые постоянно заполняют базу данных MySQL. Прошедший полный четверть часа данных необходимо проверить при запуске PHP-скрипта. Пробовал использовать MySQL с чем-то вроде SEC_TO_TIME(FLOOR((TIME_TO_SEC(UTC_TIME())-450)DIV 900)*900) однако, так как это не знает, когда начинается новый час, он ломается, когда пробегает от 0 до 15 минут.Получить данные от 15 до 30 минут назад

+---------------------+------------+ 
| 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  | 
+---------------------+------------+ 

То, что я пытаюсь выполнить на основе выше, если запрос побежал в 18:17, он получает эти строки после последнего полного четверть часа был между 18:00 и 18:15:

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

Если запрос бежал в 18:05, получает только эту строку, поскольку последний полный четверть часа был между 17:45 и 18:00:

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

ответ

1

Я считаю, что вы можете использовать GROUP BY в SQL для достижения того, что вы делаю. Тем не менее, я применил метод PHP-кода, который вы могли бы обернуть в Object или method для достижения того же.

# 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' ]; 
    } 
} 

Надеюсь, это помогло.

Смежные вопросы