小弟能力有限,在做一个小项目时碰见了一个问题,希望大家能帮助一下。
数据库cfg_hisdata表用于存放采集到的设备历史参数信息,其中有三个关键字段,TimeH(用于存放6位年月日),TimeL(用于存放6位时分秒),ParamContent(用于存放设备参数)。
存放的规则是每整小时存放一次,此外当参数发生变化时也存放一次(精确到秒)。
所以对我而言,我从库中得到的数据密度并不均匀。而我需要从查询日期0时到24时将数据以分钟为单位(可以忽略秒)组织,然后传递到前台。
我之前的解决思路大体如下
- PHP code
// 将得到的日期补全,并且计算出天数,用天数乘以1440*60得到秒数 $dateStart = 20120420; // 查询起始日期 $dateEnd = 20120420; // 查询截至日期 $day=(strtotime($dateEnd)-strtotime($dateStart))/3600/24 + 1; // 计算查询天数 $ltime = date('YmdHis', mktime(0, 0, 0, substr($dateStart, 4, 2), substr($dateStart, 6, 2), substr($dateStart, 0, 4))); // 生成查询起始日期的0点0分 for ($i = 0; $i < 1440*60*$day; $i++) // 通过循环生成以秒为单位作value的数组,然后将其作为secArr数组的value { $fullTime[] = $ltime; $ltime = date('YmdHis', strtotime("$ltime + 1 seconds")); // 时间+1秒 } $secArr = array_fill_keys($fullTime, "");
以上是因为数据精度为秒,所以构建一个key为秒的数组
之后
- PHP code
while($result_va = mysqli_fetch_assoc($query)) { $temp_data = $result_va['ParamContent']; $temp_time = $result_va['TimeH'].$result_va['TimeL']; $secArr[$temp_time] = (float)$temp_data; if ($cache_d) // 防止复写数组的起始位置 { $secArr = array_fill($cache_t, (int)$temp_time - $cache_t, $cache_d); // 用前一个有效值填补到当前有效值数组中的空值 } // 将当前有效值以及时间作为填充值备用 $cache_d = $temp_data; $cache_t = $temp_time; }
也就是在遍历查询结果的时候,根据其时标放入之前组织好的秒级数组中,在遍历下一个记录时,用上一个记录的值填补他们之间空余的值。
当这个数组组织好后,我准备再以60为一间隔遍历这个秒级的数组,将其放入分钟为单位的新数组中最后输出。
但是感觉自己的想法太过于繁琐,而且循环次数太多,太不效率。
自己接触开发不久,水平属于入门层次。还请各位指点一下,不胜感激
------解决方案--------------------
也就是说在得到的每一分钟的数据是这一分钟最后写入的数据,这样理解对吧?
于是事情就变得简单了:
查询串写作
$sql =<<< SQL
SELECT * FROM 表 where TimeH=' $dateStart' and
timel in (select max(timel) from 表 where TimeH=' $dateStart' group by left(timel,4))
SQL;
稍加修改就可跨日
读取后你只需判断分钟是否连续就可以了
相关文章推荐
• 【安装PHP】怎么在openSUSE42.1下编译安装PHP7• echo 的一部分用法• php正则获得页面所有的图片地址• CodeIgniter 控制层文件互相跳方法有关问题 • 遍历文件之后的默认排序不同环境还不一样,哪位高手能解释下呢独孤九贱(3)_JavaScript视频教程
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。没有它,你的前端生涯是不完整的。《php.cn独孤九贱(3)-JavaScript视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了javascript知识。
JavaScript教程122858次播放
独孤九贱(6)_jQuery视频教程
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等,是全球最流行的前端开发框架之一。PHP中文网根据最新版本,独家录制jQuery最新视频教程,回馈PHP中文网的新老用户。
jQuery教程101493次播放
jQuery与Ajax基础与实战
jQuery是最流行的JS函数库,封装了许多实用的功能,其中最引人入胜的就是Ajax。 jQuery中的Ajax操作,语法简单,操作方便,使Ajax从未如此轻松,前端人员从此不再为与服务器异步交互而发愁,本套课程,精选了最常用的几个方法,从基本的语法到每个参数,再到具体实例进行了全面的讲解。
AJAX教程3245次播放
Git教程(60分钟全程无废话版)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
JavaScript教程2538次播放