如何用Laravel实现按日和按小时查询数据的详细长尾关键词实例?
- 内容介绍
- 文章标签
- 相关推荐
本文共计813个文字,预计阅读时间需要4分钟。
使用Laravel做后台数据统计时,若需查询每天注册量及其分类数据,直接使用`created_at`分组可能不够高效。以下是一种改进的查询方法:
1. 使用数据库的日期函数将`created_at`字段转换为日期格式,然后分组查询。
2.利用Laravel的查询构建器来优化查询。
示例代码如下:
php
$ registrations=DB::table('users') ->select( DB::raw('DATE(created_at) as registration_date'), DB::raw('COUNT(*) as total_registrations'), // 添加其他分类字段 DB::raw('SUM(CASE WHEN category=A THEN 1 ELSE 0 END) as category_a'), DB::raw('SUM(CASE WHEN category=B THEN 1 ELSE 0 END) as category_b') ) ->groupBy('registration_date') ->get();2. 推荐使用时间选择器插件或自定义时间选择逻辑,以便灵活选择时间段。
示例代码:
phpuse Carbon\Carbon;
// 假设我们要查询过去一个月的数据$startDate=Carbon::now()->subMonth();$endDate=Carbon::now();
$registrations=DB::table('users') ->whereBetween('created_at', [$startDate, $endDate]) ->select( // ... 与上面相同的查询字段 ) ->groupBy('registration_date') ->get();
使用laravel做后台数据统计的时候,需要查询每天的注册量之类的数据
这时候如果直接用created_at分组,是不好用的。
1、所以本文解决这个查询应该怎么写。
2、并且推荐一个时间选择插件,因为统计中一定会用到,本周数据、本月、本季度、上个月。。。。
按天分组数据:
Event::where('created_at','>',Carbon::parse($request->start_date)) ->where('created_at','<',Carbon::parse($request->end_date)) //两个where限制开始结束时间 ->groupBy('date') ->get([DB::raw('DATE(created_at) as date'),DB::raw('COUNT(*) as value')]) ->toArray();
如果想按小时分组所有查询出来的数据:
Event::where('created_at','>',Carbon::parse('2017-01-01')) ->where('created_at','<',Carbon::parse('2017-11-09')) ->groupBy('day') ->get([ //通过date_format()来格式化created_at字段 DB::raw('DATE_FORMAT(created_at,\'%H\') as day'), DB::raw('COUNT(*) as value')]) ->toArray()
分享一个时间选择插件
这是官网地址
我把我改好的代码附上:
$(function () { /*设置开始结束时间*/ var start = moment().subtract(30, 'days'); var end = moment().subtract(-1,'day'); var datas = {}; /*选择之后,将时间重新赋值input*/ function cb(start, end) { $('#reportrange span').html(start.format('YYYY/MM/DD') + ' - ' + end.format('YYYY/MM/DD')); } $('#reportrange').daterangepicker({ startDate: start, endDate: end, /*本地化数据*/ locale: { "format": "YYYY/MM/DD", "separator": " - ", "applyLabel": "应用", "cancelLabel": "关闭", "fromLabel": "From", "toLabel": "至", "customRangeLabel": "自定义", "weekLabel": "W", "daysOfWeek": ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], "monthNames": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" ], "firstDay": 1 }, ranges: { '今天': [moment(), moment().subtract(-1, 'days')], '昨天': [moment().subtract(1, 'days'), moment()], '前7天': [moment().subtract(7, 'days'), moment()], '前30天': [moment().subtract(30, 'days'), moment()], '本月': [moment().startOf('month'), moment().endOf('month').subtract(-1,'day')], '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month').subtract(-1,'day')], '所有': [moment("2017-09-25"), moment().subtract(-1, 'days')] } }, cb); cb(start, end); });
超级好用,结合echart
在用echart的map时候,因为地图权限没有,所以要加载百度地图。这个坑另开帖子记录吧。
以上这篇laravel按天、按小时,查询数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。
本文共计813个文字,预计阅读时间需要4分钟。
使用Laravel做后台数据统计时,若需查询每天注册量及其分类数据,直接使用`created_at`分组可能不够高效。以下是一种改进的查询方法:
1. 使用数据库的日期函数将`created_at`字段转换为日期格式,然后分组查询。
2.利用Laravel的查询构建器来优化查询。
示例代码如下:
php
$ registrations=DB::table('users') ->select( DB::raw('DATE(created_at) as registration_date'), DB::raw('COUNT(*) as total_registrations'), // 添加其他分类字段 DB::raw('SUM(CASE WHEN category=A THEN 1 ELSE 0 END) as category_a'), DB::raw('SUM(CASE WHEN category=B THEN 1 ELSE 0 END) as category_b') ) ->groupBy('registration_date') ->get();2. 推荐使用时间选择器插件或自定义时间选择逻辑,以便灵活选择时间段。
示例代码:
phpuse Carbon\Carbon;
// 假设我们要查询过去一个月的数据$startDate=Carbon::now()->subMonth();$endDate=Carbon::now();
$registrations=DB::table('users') ->whereBetween('created_at', [$startDate, $endDate]) ->select( // ... 与上面相同的查询字段 ) ->groupBy('registration_date') ->get();
使用laravel做后台数据统计的时候,需要查询每天的注册量之类的数据
这时候如果直接用created_at分组,是不好用的。
1、所以本文解决这个查询应该怎么写。
2、并且推荐一个时间选择插件,因为统计中一定会用到,本周数据、本月、本季度、上个月。。。。
按天分组数据:
Event::where('created_at','>',Carbon::parse($request->start_date)) ->where('created_at','<',Carbon::parse($request->end_date)) //两个where限制开始结束时间 ->groupBy('date') ->get([DB::raw('DATE(created_at) as date'),DB::raw('COUNT(*) as value')]) ->toArray();
如果想按小时分组所有查询出来的数据:
Event::where('created_at','>',Carbon::parse('2017-01-01')) ->where('created_at','<',Carbon::parse('2017-11-09')) ->groupBy('day') ->get([ //通过date_format()来格式化created_at字段 DB::raw('DATE_FORMAT(created_at,\'%H\') as day'), DB::raw('COUNT(*) as value')]) ->toArray()
分享一个时间选择插件
这是官网地址
我把我改好的代码附上:
$(function () { /*设置开始结束时间*/ var start = moment().subtract(30, 'days'); var end = moment().subtract(-1,'day'); var datas = {}; /*选择之后,将时间重新赋值input*/ function cb(start, end) { $('#reportrange span').html(start.format('YYYY/MM/DD') + ' - ' + end.format('YYYY/MM/DD')); } $('#reportrange').daterangepicker({ startDate: start, endDate: end, /*本地化数据*/ locale: { "format": "YYYY/MM/DD", "separator": " - ", "applyLabel": "应用", "cancelLabel": "关闭", "fromLabel": "From", "toLabel": "至", "customRangeLabel": "自定义", "weekLabel": "W", "daysOfWeek": ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], "monthNames": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" ], "firstDay": 1 }, ranges: { '今天': [moment(), moment().subtract(-1, 'days')], '昨天': [moment().subtract(1, 'days'), moment()], '前7天': [moment().subtract(7, 'days'), moment()], '前30天': [moment().subtract(30, 'days'), moment()], '本月': [moment().startOf('month'), moment().endOf('month').subtract(-1,'day')], '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month').subtract(-1,'day')], '所有': [moment("2017-09-25"), moment().subtract(-1, 'days')] } }, cb); cb(start, end); });
超级好用,结合echart
在用echart的map时候,因为地图权限没有,所以要加载百度地图。这个坑另开帖子记录吧。
以上这篇laravel按天、按小时,查询数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

