這周工作上需要做一個管理后台的指標統計小功能(從數據查詢到頁面實現)。由於后台使用的是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。
以上三個方面完成了,基本能實現一個簡單的指標統計模塊。
開始寫博客,希望堅持下去。聽說技術大牛都是從開始寫博客一路成長起來的:)