繁体   English   中英

在15到30分钟前获取数据

[英]Get Data between 15 and 30 Minutes ago

我有不断填充MySQL数据库的数据。 运行PHP脚本时,需要检查过去一刻钟的数据。 使用MySQL与SEC_TO_TIME(FLOOR((TIME_TO_SEC(UTC_TIME())-450)DIV 900)*900)类的MySQL进行了尝试,但是由于这不知道何时开始新的时间,因此在运行0-15分钟之间会中断。

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

我相信您可以在SQL中使用GROUP BY来实现您的工作。 但是,我找到了一个PHP代码方法,您可以将其包装在Object或方法中以实现相同的目的。

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

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM