这周工作上需要做一个管理后台的指标统计小功能(从数据查询到页面实现)。由于后台使用的是Laravel框架,自然想通过orm模型来完成查询。第一反应是通过循环语句分别统计每天的指标,最后汇总。但这样做效率太低了,故放弃之。
由于对sql语句不是很熟悉(mysql函数这块急需加强,听说mysql high performance 这本书不错,可以了解下),不知道有哪些函数可以实现我的需求,于是在google上输入自己想到的关键词--“statistics everyday data laravel”来尝试搜索相关信息,果然第一条搜索结果就是很好的例子(在这里真心要赞叹下google的强大),原来实现这个需求要用到mysql中的date()函数,对照例子赶紧撸了一个出来。
示例代码
$days = Input::get('days', 7); $range = \Carbon\Carbon::now()->subDays($days); $stats = User::where('created_at', '>=', $range) ->groupBy('date') ->orderBy('date', 'DESC') ->remember(1440) ->get([ DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as value') ]) ->toJSON();
参考例子在这里https://gist.github.com/msurguy/9984166
页面上的统计图表这块使用了Echarts,这个是百度的一个前端团队做的,很好很强大,基本各种图表都能实现(虽然一直在抵触百度的产品,但是对于开源技术还是要持开放的态度,好东西值得表扬和赞美)。观摩效果图戳这里http://echarts.baidu.com/examples.html
既然要统计指标,肯定得有个时间段,而老板的需求又基本都是变态的,时间段选择要能满足预先设置的(比如过去一周,过去一个月,过去30天,这个月,上个月,这个季度,上个季度等)和自定义的。之前使用的是datetimepicker(文档在这里http://xdsoft.net/jqplugins/datetimepicker/)这个插件,现在已经不能满足业务需求,自己写是很难的,即使想写,老板也不会给这个时间的。于是再次求教于google,果然又找到一个能满足需求的插件daterangepicker(文档在这里http://www.daterangepicker.com/)。完成这个功能后把datetimepicker这个插件都替换为daterangepicker,丫的实在跟不上时代的脚步。使用daterangepicker过程中顺便了解了Moment.js--js中一个封装好的处理时间这块的类库,类似于php中的carbon。
以上三个方面完成了,基本能实现一个简单的指标统计模块。
开始写博客,希望坚持下去。听说技术大牛都是从开始写博客一路成长起来的:)