我的数据不断填满MySQL数据库。当PHP脚本运行时,需要检查过去整整四分之一小时的数据。尝试使用MySQL SEC_TO_TIME(FLOOR((TIME_TO_SEC(UTC_TIME())-450)DIV 900)*900)
之类的东西
但是,由于这不知道何时开始新的小时,因此在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 |
答案 0 :(得分:1)
我相信您可以使用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' ];
}
}
希望这会有所帮助。