统计,就是把基本的数据,整合起来。

用到sql的,有group by 功能,count功能,order by功能等等。

sql将收集的数据,进行统计分析。

一般情况下,sql处理后得到的数据,还要通过php的逻辑来进行整理。

以一定的格式,展示到前台。

一般都是以数组的方式展示,这也是数据结构的概念。

看这张图片,基本想想结构大概为

{上线数,出单总数,核过总数,总人均,总核率,{(坐席人1,工号1,出单数1,发货数1,核单率1),(坐席人2,工号2,出单数2,发货数2,核单率2)}}

如果用php展示成上面的结构的话,就很好处理了。

首先通过sql获取初次处理的数据,

别小看这初次处理的数据,处理的好,会非常的便捷。

SELECT a.user,count(order_id) as subcount,b.passcount,c.full_name from vicidial_order a LEFT JOIN (SELECT user,count(order_id) as passcount from vicidial_order where time > UNIX_TIMESTAMP('2015-11-7') and user_group = 'TeamOne' and verifysta = 'Y' GROUP BY user ) b on a.user = b.user LEFT JOIN vicidial_users c on a.user = c.user where time > UNIX_TIMESTAMP('2015-11-7') and a.user_group = 'TeamOne' GROUP BY a.user ;

sql思路,归类订单表,以user来进行归类。

获取每个人,当天的订单提交总数count()。

还要获取每个人,订单通过审核的总数,通过where筛选。

然后关联查询其他相关数据。

有了这些基本数据,其他的相关数据都能出来了。

通过php来处理获取,其中变量命名要清晰,这样也有利于阅读代码。

$select_sql = "SELECT a.user,count(order_id) as subcount,b.passcount,c.full_name from vicidial_order a LEFT JOIN (SELECT user,count(order_id) as passcount from vicidial_order where time > UNIX_TIMESTAMP('".$today."') and user_group = '".$user_group."' and verifysta = 'Y' GROUP BY user ) b on a.user = b.user LEFT JOIN vicidial_users c on a.user = c.user where time > UNIX_TIMESTAMP('".$today."') and a.user_group = '".$user_group."' GROUP BY a.user ";
$rows = mysqli_query( $db_conn, $select_sql );
$row_counts_list = mysqli_num_rows( $rows );
if ( $row_counts_list != )
{
$i = ;
while($rs = mysqli_fetch_assoc( $rows )) // mysqli_fetch_assoc 获取键值数据 mysqli_fetch_field 获取一条数据 mysqli_fetch_fields 获取多组数据 mysqli_fetch_row
{
$outData['list'][$i]['user'] = $rs['user'];
$outData['list'][$i]['full_name'] = $rs['full_name'];
$outData['list'][$i]['subcount'] = $rs['subcount'];
$outData['list'][$i]['passcount'] = $rs['passcount'];
$outData['list'][$i]['passrate'] = round(($rs['passcount']/$rs['subcount'])*)."%"; $outData['all_subcount'] += $rs['subcount'];
$outData['all_passcount'] += $rs['passcount']; $i++;
}
$outData['all_passrate'] = round(($outData['all_passcount']/$outData['all_subcount'])*)."%";
$outData['online_count'] = $row_counts_list;
$outData['average_subcount'] = round($outData['all_subcount']/$outData['online_count'],);
}

其中outData就是要输出的数据结构类型。

Array
(
[list] => Array
(
[] => Array
(
[user] =>
[full_name] => 魏硕磊
[subcount] =>
[passcount] =>
[passrate] => %
) [] => Array
(
[user] =>
[full_name] => 刘庆
[subcount] =>
[passcount] =>
[passrate] => %
) [] => Array
(
[user] =>
[full_name] => 章厚英
[subcount] =>
[passcount] =>
[passrate] => %
) ) [all_subcount] =>
[all_passcount] =>
[all_passrate] => %
[online_count] =>
[average_subcount] =>
)

获取数据后,一切都好办了。

套入页面就可以了,然后自己再调试调试。

<!-- begin -->
<?php foreach ($outData as $k => $v) { ?>
<div class="col-xs-12 col-sm-6 widget-container-col ui-sortable"> <div class="widget-box widget-color-blue">
<div class="widget-header">
<h5 class="widget-title bigger lighter">
<i class="ace-icon fa fa-table"></i>
【<?php echo $v['group_name'];?>】成绩表
</h5>
</div> <div class="widget-body">
<div class="widget-main no-padding">
<table> </table>
<table class="table table-striped table-bordered table-hover">
<thead style="text-align:center;font-size:16px">
<tr>
<td colspan="">上线总人数:</td>
<td colspan=""><?php echo $v['stat']['online_count']?></td>
</tr>
<tr>
<td colspan="">出单总数:</td>
<td style="color:red"><?php echo $v['stat']['all_subcount']?></td>
<td >核过总数</td>
<td style="color:red"><?php echo $v['stat']['all_passcount']?></td>
</tr>
<tr>
<td colspan="">总人均:</td>
<td style="color:red"><?php echo $v['stat']['average_subcount']?></td>
<td >总核率</td>
<td style="color:red"><?php echo $v['stat']['all_passrate']?></td>
</tr>
</thead> <thead class="thin-border-bottom">
<tr>
<th>
<i class="ace-icon "></i>
坐席人
</th>
<th>
<i class="ace-icon "></i>
工号
</th>
<th>
<i class="ace-icon "></i>
出单数
</th>
<th>
<i class="ace-icon "></i>
发货数
</th>
<th>
<i class="ace-icon "></i>
核单率
</th>
</tr>
</thead> <tbody>
<?php foreach ($v['stat']['list'] as $listk => $listv) { ?>
<tr>
<td class=""><?php echo $listv['full_name']?></td> <td>
<a href="#"><?php echo $listv['user']?></a>
</td> <td class="">
<a href="#"><?php echo $listv['subcount']?></a>
</td>
<td class=""><?php echo $listv['passcount']?></td>
<td class=""><?php echo $listv['passrate']?></td> </tr>
<?php }?> <tr style="color:red;font-size:16px">
<td class=""colspan="">总计</td>
<td class=""><?php echo $v['stat']['all_subcount']?></td>
<td class=""><?php echo $v['stat']['all_passcount']?></td>
<td class=""><?php echo $v['stat']['all_passrate']?></td>
</tr> </tbody>
</table>
</div>
</div>
</div>
</div>
<?php }?>
<!-- end -->

PHP 统计数据功能 有感的更多相关文章

  1. 生成统计数据并导出Excel

    需求:看如下表格的统计需求 生产调度中心部门需要从IT技术部门得到这些统计数据 步骤: (1)获取所有的子公司列表 (2)遍历所有的子公司,获取每个子公司的库存信息 (3)遍历所有的库存信息,并对库存 ...

  2. 用NPOI实现导入导出csv、xls、xlsx数据功能

    用NPOI实现导入导出csv.xls.xlsx数据功能   直接上代码 首先定义一个接口   如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...

  3. Oracle 收集统计数据

    查看最新用户表统计信息 select owner,table_name,last_analyzed from dba_tables where owner not like '%SYS%' order ...

  4. Pandas日期数据处理:如何按日期筛选、显示及统计数据

    前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows ...

  5. SD从零开始67-70 后勤信息系统中的标准分析, 信息结构, 信息的更新规则, 建立统计数据

    SD从零开始67 后勤信息系统中的标准分析 标准分析中的报表Reporting in Standard Analyses 标准分析为高质量的表达和分析LIS中的数据基础提供了大量的功能: 当你决定了一 ...

  6. 百度统计数据的UV和IP为什么不一样?

    相信网站站长们在每天查看百度统计数据时会发现网站的IP和UV数据时大时小,有时候IP比UV大,有时候UV比IP大,站长们可能对这些情况感到奇怪.今天就和大家分享一下UV和IP的知识,帮助大家更好地做好 ...

  7. 转载:SQL按照日、周、月、年统计数据的方法

    转载源:http://www.jb51.net/article/42613.htm SQL按照日.周.月.季度.年统计数据的方法 方式一: --按日 select sum(consume),day([ ...

  8. 一站式学习Wireshark(七):Statistics统计工具功能详解与应用

    Wireshark一个强大的功能在于它的统计工具.使用Wireshark的时候,我们有各种类型的工具可供选择,从简单的如显示终端节点和会话到复杂的如Flow和IO图表.本文将介绍基本网络统计工具.包括 ...

  9. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

随机推荐

  1. 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 读写 ...

  2. 【spark】示例:二次排序

    我们有这样一个文件          首先我们的思路是把输入文件数据转化成键值对的形式进行比较不就好了嘛! 但是你要明白这一点,我们平时所使用的键值对是不具有比较意义的,也就说他们没法拿来直接比较. ...

  3. Windows手动安装Apache,MySql服务

    绿色版的Apache,Mysql需要以服务方式运行.或者由于某种原因服务管理器里面没有服务项了,可以进行手工注册服务和启并服务. # Apache Apache进到安装目录的bin目录下,运行dos命 ...

  4. LINUX 修改本机yum源为163镜像源

    进入yum源配置目录 [root@localhost yum.repos.d]# cd /etc/yum.repos.d/ 备份系统yum源,用于日后恢复. [root@localhost yum.r ...

  5. android 字符串string

    String : 字符串类型 http://www.open-open.com/lib/view/open1387942832078.html 一.构造函数     String(byte[ ] by ...

  6. 简述Java面向对象三大特征:封装、继承、多态

    封装: 把对象的全部属性和服务结合在一起,形成不可分割的独立单位: 尽可能隐藏内部细节.(数据隐藏.隐藏具体实现的细节)     public.private.protected.default pu ...

  7. 【占位】HihoCoder1317 跳舞链

    跳舞链 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近遇到一个难题,他需要破解一个棋局. 棋局分成了n行,m列,每行有若干个棋子.小Ho需要从中选择若干行使得 ...

  8. 调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type

    调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type 解决方法1: 原因是Spring中的cglib-nodep-2.x.x.jar与Hibernate中 ...

  9. Stars

    Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

  10. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...