Home >Backend Development >PHP Tutorial >php根据时间段查询每天的数据
现在需要查询给定的日期内的每天的数据,请教各位有没有什么好的办法?
首先数据库必须要有一个保存日期的字段,然后按日期分组统计即可。
首先数据库必须要有一个保存日期的字段,然后按日期分组统计即可。
时间戳分组比较麻烦,先用日期转换函数转成日期,然后再分组,不过这样效率较低,最好还是设计的时候增加一个日期字段。
能不能详细说下的,我还是不大明白哈!
你可以看看MYSQL的日期函数,比如你保存时间戳的字段为t
可以这样统计数据
SELECT COUNT(*) AS n,FROM_UNIXTIME(`t`,'%y-$m-%d') AS d FROM `tb` GROUP BY d ORDER BY d
不过这种效率很低,最好你插入的时候就计算好日期。
select id,FROM_UNIXTIME(timeField, '%Y%m%d') as time from tableName where FROM_UNIXTIME(timeField, '%Y%m%d')=20150920
你好,“插入的时候就计算好日期”指的是在数据库保存数据的时候就保存成如2015-10-08这种格式的日期吗?
我现在获取到的是一个时间段的开始时间和结束时间,是不是要先把这段时间按天保存到一个数组,然后按“每天”执行查询当天的数据的?
你好,“插入的时候就计算好日期”指的是在数据库保存数据的时候就保存成如2015-10-08这种格式的日期吗?
我现在获取到的是一个时间段的开始时间和结束时间,是不是要先把这段时间按天保存到一个数组,然后按“每天”执行查询当天的数据的?
<?php ///$ary为该时间区间下所有的数据foreach($ary as $k=>$v){ $datas['day_'.date('md',$v['timestamp'])][]=$v;//分组 }var_dump($datas['day_0809'])//为8月9号那天所有数据;?>
你好,“插入的时候就计算好日期”指的是在数据库保存数据的时候就保存成如2015-10-08这种格式的日期吗?
我现在获取到的是一个时间段的开始时间和结束时间,是不是要先把这段时间按天保存到一个数组,然后按“每天”执行查询当天的数据的?
<?php ///$ary为该时间区间下所有的数据foreach($ary as $k=>$v){ $datas['day_'.date('md',$v['timestamp'])][]=$v;//分组 }var_dump($datas['day_0809'])//为8月9号那天所有数据;?>
时间戳有时间戳的好处
用php来做数据整合就可以咯.
时间戳有时间戳的好处
用php来做数据整合就可以咯.
PHP做数据整合适合小数据量,大数据太耗资源,如果你有100W数据需要占用多少内存多少带宽?一亿呢?
PHP做数据整合适合小数据量,大数据太耗资源,如果你有100W数据需要占用多少内存多少带宽?一亿呢?
每种数据库的日期时间函数都是不一样的
如果你有升迁到大型或分布式数据库的打算时,则一定不能使用日期、时间类型字段
使用 unix 时间戳可免除绝大多数日期时间函数的烦恼
select *,from_unixtime(addtime, '%Y%m%d') as d from table where from_unixtime(addtime,'%Y%m%d')>=20150101 and from_unixtime(addtime,'%Y%m%d')
$d1 = strtotime('2015-01-01');
$d2 = strtotime('2015-02-01');
$sql = "select * from tbl_name where field between $d1 and $d2"
查询时没有了格式转换,自然效率要高很多
数据库存时间戳就挺好的 不用改 你查询的条件 可以把给的制定日期变成时间戳再去查库啊
多谢各位的回答,不但解决了我的问题还让我学到了更多的知识,非常感谢!!!
数据库存时间戳就挺好的 不用改 你查询的条件 可以把给的制定日期变成时间戳再去查库啊
这没有什么
select 时间戳, sum(数量) from 表 group by floor(时间戳/86400)
这没有什么
select 时间戳, sum(数量) from 表 group by floor(时间戳/86400)