统计每月订单数量并生成折线图
来源:互联网 发布:sql server 基础语法 编辑:程序博客网 时间:2024/06/06 09:06
数据库内生成订单时的时间格式是这样的:
这里使用Yii1.1框架
1、先在 include/components 下封装了一个执行sql工具类 :ExecSql.php 和 拼接数据的工具类:GetCharsData.php
ExecSql.php代码:
<?php/*** * @执行 sql 类。 */class ExecSql { //@执行sql方法【获取所有】 public static function All($sql){ //@获得数据库对象 $connection = Yii::app()->db; //@执行传递过来的sql return $connection->createCommand($sql)->queryALL(); } //@执行sql方法【获取第一条】 public static function One($sql){ //@获得数据库对象 $connection = Yii::app()->db; //@执行传递过来的sql return $connection->createCommand($sql)->queryRow(); }}
GetCharsData.php代码:
<?php/*** * @拼接图表所需数据类。 */class GetCharsData { /*** * @array 拼接的数据 * @获取 Highcharts 所需数据格式 */ public static function getHighData($rows){ //按照每年的格式区分数据 $new_row=array(); foreach ($rows as $r){ $year=substr($r['months'],0,4); $new_row[$year][]=$r; } unset($rows); //将区分的数据拼接成客户端使用的格式 $new_arr=array(); foreach ($new_row as $key=>$val){ $count=''; foreach ($val as $v){ $count.=','.$v['count']; } $new_arr[$key]='['.substr($count,1).']'; } unset($new_row); $data=''; foreach ($new_arr as $newk=>$newv){ $data.=',{name: \''.$newk.'年\', data: '.$newv.'}'; } unset($new_arr); //返回拼接好的数据。 return $data; } /*** * @array 操作的数据 * @获取数据对应的月份 */ public static function getTime($rows){ //获取每条数据的月份 $time=array(); foreach ($rows as $r){ $time[]=substr($r['months'],5,2); } //@返回筛选好的数据 return empty($time)?'':'[\''.implode('\',\'',array_unique($time)).'\']'; }}
2、订单统计控住器:CountController.php
<?phpclass CountController extends JController { //@订单统计模块 public function actionOrder(){ //@默认三个月数据 $begin=date('Y-m-d',strtotime("-3 month")); $end=date('Y-m-d',time()); //@订单数据sql $sql='select DATE_FORMAT(create_time,\'%Y-%m\') months,count(id) count from `order` where create_time >= \''.$begin.'\' and create_time <= \''.$end.'\' group by months order by months'; //@执行sql $rows=ExecSql::All($sql); //调用拼接数据方法。 $data=GetCharsData::getHighData($rows); $view['count']=count($rows); //渲染页面 $this->render('order',array( 'data'=>substr($data,1), 'time'=>GetCharsData::getTime($rows), 'view'=>$view, )); } //@订单搜索模块 public function actionOrderpost(){ //@判断如果没有选择开始时间 if(empty($_POST['start'])){ $this->error('开始时间不得为空~'); die; } //@如果是提交 if($_POST){ //@过滤数据 $start=isset($_POST['start'])?htmlentities(htmlentities($_POST['start'])):''; $end=isset($_POST['end'])?htmlentities(htmlentities($_POST['end'])):''; //@如果开始时间大于结束时间 if(strtotime($start)>strtotime($end)&&!empty($end)){ $this->error('开始时间不得大于结束时间~'); die; } //@默认条件 $where=' where'; //@如果选择了开始时间 if(!empty($start)){ $view['start']=$start; $where.=' create_time >= \''.$start.'\''; } //@如果选择了结束时间 if(!empty($end)){ $view['end']=$end; $where.=' and create_time <= \''.$end.'\''; } //@拼接sql $sql='select DATE_FORMAT(create_time,\'%Y-%m\') months,count(id) count from `order`'.$where.' group by months order by months'; //执行 sql 语句 $rows=ExecSql::All($sql); //调用拼接数据方法。 $data=GetCharsData::getHighData($rows); $view['count']=count($rows); //渲染页面 $this->render('order',array( 'data'=>substr($data,1), 'time'=>GetCharsData::getTime($rows), 'view'=>$view, )); //@销毁变量 unset($rows); die; } }}
3、展示订单折线图页面代码:
<div class="formbody"> <div id="usual1" class="usual" > <form id="companyForm" action="/count/orderpost" method="post" > <ul class="seachform1" style="width:100%;"> <li> <div class="vocation"> 下单时间:<input type="text" class="scinput" id="start" readonly="readonly" name="start" value="<?php if(isset($view['start'])){echo $view['start'];}?>" > -- <input type="text" class="scinput" id="end" readonly="readonly" name="end" value="<?php if(isset($view['end'])){echo $view['end'];}?>" > </div> </li> <li> <label> </label> <input name="submit" type="submit" class="scbtn" value="统计"/> </li> </ul> </form> <hr style="width: 100%;height: 1px;border: 1px solid #c2ccd1;margin-bottom: 30px;margin-top: 10px;"/> <?php if($view['count']==0){ ?> <p style="text-align:center;font-weight: bold;font-size: 24px;color: red;" class="p_style"> 没有您想要的数据,请重新尝试~ </p> <?php }else{ ?> <div id="container" style="min-width:400px;height:400px"></div> <?php }?> </div></div><script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js"></script><script src="https://img.hcharts.cn/highcharts/highcharts.js"></script><script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script><script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script><script> $(function () { Highcharts.setOptions({ credits:{ enabled:false } }); $('#container').highcharts({ chart: { type: 'line' }, title: { text: '折线图' }, subtitle: { text: '单位(单)' }, xAxis: { categories: <?php echo $time; ?> }, yAxis: { title: { text: '' } }, plotOptions: { line: { dataLabels: { enabled: true // 开启数据标签 }, enableMouseTracking: false // 关闭鼠标跟踪,对应的提示框、点击事件会失效 } }, series: [ <?php echo $data; ?> ] }); });</script>
效果图:
结束。
阅读全文
0 0
- 统计每月订单数量并生成折线图
- 统计每月订单总额
- 使用jChart生成统计折线图
- 统计报表柱状图,折线图生成
- 统计报表柱状图,折线图生成
- 随机生成小写字母并统计每个字母的数量
- oracle 统计每天新增订单数量
- Scrapy爬取hupu论坛标题统计数量并生成wordcloud
- ecshop按月统计订单并输出柱状图
- mysql 统计每个门店 每天 每月 每年 的订单 消费总额
- 动态生成折线图
- 动态生成折线图
- JFreeChart生成折线图
- 生成折线图,源代码
- JS生成折线图
- PHP生成折线图
- sql分割字符串并分组统计数量
- Halcon 识别彩色小球并统计数量
- C++新课与C复习
- 【ML--02】第二课 线性回归
- Android-手机QQ浏览器耗电测试工具及方法介绍
- MyEclipse快捷键大全
- X2Go Client下载与使用(新手向)
- 统计每月订单数量并生成折线图
- SQL获取AWR信息
- Oracle日期转换处理
- TCP定时器
- 请求参数封装到JavaBean从入门到精通
- 13_ARM汇编自学笔记指令系统之批量数据加载存储指令
- adb命令大全
- 暑假学习--作业总结一
- 决策树(decision tree)的自我理解 (下) 关于剪枝和连续值缺失值处理