MySQL FROM_UNIXTIME根据指定时间段分组获取数据

UNIX_TIMESTAMP 将时间输出为时间戳

1、无参数调用:UNIX_TIMESTAMP()

返回值:当前时间戳

例子:select UNIX_TIMESTAMP(); => 1494746052  (2017/5/14 15:14:12)

2、无参数调用:UNIX_TIMESTAMP(date)

例子:select UNIX_TIMESTAMP("2017-01-01"); => 1483200000  (2017/01/01 00:00:00)



FROM_UNIXTIME 格式化MYSQL时间戳函数

作用:将MySQL中以int(11)存储的时间以"YYYY-MM-DD HH-II-SS"的格式来显示

语法,FROM_UNIXTIME(time,"%Y-%m-%d %H:%i:%s")

比如统计每天销售时间段高峰期(以小时分组),数据库表存了一张订单记录表:create table table_name(id int primary key,time int(10));  time记录的是订单时间戳,以前的做法是,接收查询开始时间、查询结束时间,然后循环查询每天的注册数量,代码:

/* 查询2015-12-01 至 2015-12-14 */  
// 开始的时间戳  
$startUnix = 1494604800; // 2017-05-13 00:00:00  
// 结束的时间戳  
$endUnix = 1494777599;   // 2017-05-14 23:59:59  
for($i = $startUnix; $i < $endUnix; $i += 86400){  // 86400为1天的秒数  
    // 查询  
    $sql = 'select count(*) from table_name where time> '.$i.' and register_time <= '.$i + 86400;  
    // 执行查询  
}

这种方法的弊端就是,查询开始于结束的日期相差多少天就查询检索数据库多少次。

优化方法:

/* 查询2017-05-13 至 2017-05-14 */  
// 开始的时间戳  
$startUnix = 1494604800; // 2017-05-13 00:00:00  
// 结束的时间戳  
$endUnix = 1494777599;   // 2017-05-14 23:59:59 
  
$sql = 'select count(id) as count, FROM_UNIXTIME(time, '%H') as datetime from table_name where time> '.$startUnix.' and time <= '.$endUnix group by datetime;  
// 执行查询

1111111111.png


查询时把时间戳转成小时,最后group by 分组,得到每天每个小时段的订单数,查询数据库一次

QQ截图20170514150550.png

点赞

发表评论