thinkphp关于考生信息相关统计
程序员文章站
2022-06-05 09:19:40
...
最近做的系统里面需要统计,写了一个案例,方便自己以后查看
相关数据表和字段名:
1.考生信息表(tb_examinee)
序号 | 字段名 | 数据类型 | 约束条件 | 备注 |
1 | eid | int |
主键 |
自增 |
2 | idnum | char(18) | 非空 | 身份证号码 |
3 | truename | varchar(50) | 非空 | 姓名 |
4 | category | int | 非空 | 毕业类别 1:普高 2:职高 |
5 | examyear | int | 非空 | 考试年份 |
6 | intent1 | varchar(50) | 非空 | 第一志愿 |
7 | intent2 | varchar(50) | 第二志愿 | |
8 | ispass | int | 非空 | 审核状态 0:未通过审核 1:通过审核 |
9 | isregister | int | 报道状态 0:未报到 1:报到 |
|
10 | score | float(5,2) | 成绩 | |
11 | inter | varchar(50) | 非空 | 录取专业 |
12 | status | int | 非空 | 是否被禁用 -1:被删除 0:禁用 1:正常使用 |
2.招生计划详情(tb_plan)
序号 | 字段名 | 数据类型 | 约束条件 | 备注 |
1 | pid | int | 主键 | 自增 |
2 | examyear | int | 非空 | 年份 |
3 | major | varchar(50) | 非空 | 专业名称 |
4 | department | varchar(50) | 非空 | 所属院系 |
5 | num1 | int | 普高计划人数 | |
6 | num2 | int | 职高计划人数 | |
7 | status | int | 是否被禁用 -1:被删除 0:禁用 1:正常使用 |
因为统计的东西比较多,所以单独写了一个类文件
在Application/Admin/下---->新建Login文件夹---->新建ExamineeLogic.class.php类(类名必须对应一张数据表,即文件名为某张数据表的名字)
ExamineeLogic.class.php
该类的命名空间和继承:
<?php
namespace Admin\Logic;
use Think\Model;
class ExamineeLogic extends Model{
/**
年份详情
**/
public function getExamyear(){
$Examinee=M('Examinee');
$condition['status']=1; //正常使用
$examyear=$Examinee->distinct(true)->field('examyear')->where($condition)->order('eid asc')->select();
foreach($examyear as $v){
$examyearsArr[]=$v['examyear'];
}
return $examyearsArr;
}
/**
专业详情
**/
public function getMajorInfo(){
$Plan=M('Plan');
if($search_text=I("search_text")){//接收查询信息
$condition['major']=array("like","%$search_text%");//模糊查询
}
$condition['status']=1; //正常使用
$majorInfo=$Plan->distinct(true)->field('major')->where($condition)->order('pid asc')->select();
return $majorInfo;
}
/**
组建查询方法
@inter 专业
@examyear 年份
@type
@category 普高|职高 == 1|2
**/
public function getMajorCounts($inter,$examyear,$type,$category){
$Examinee=M('Examinee');
$conditions['status']=1; //正常使用
switch($type){
case 1: //报名总人数
$condition1['intent1']=$inter;
$condition1['examyear']=$examyear;
$condition1['category']=$category;
$conditions=$condition1;
break;
case 2: //通过审核数
$condition2['intent1']=$inter;
$condition2['examyear']=$examyear;
$condition2['category']=$category;
$condition2['ispass']=1;
$conditions=$condition2;
break;
case 3: //已报到的人数
$condition3['intent1']=$inter;
$condition3['examyear']=$examyear;
$condition3['category']=$category;
$condition3['isregister']=1;
$conditions=$condition3;
break;
case 4: //录取的人数
$condition4['inter']=$inter;
$condition4['examyear']=$examyear;
$condition4['category']=$category;
$conditions=$condition4;
break;
}
$examineeCounts=$Examinee->where($conditions)->count();
return $examineeCounts;
}
/**
普高职高计划人数
@inter 专业
@examyear 年份
@type
@return nums 返回人数
**/
public function getMajorNums($inter,$examyear,$type){
$Plan=M('Plan');
$condition['status']=1;
$condition['major']=$inter;
$condition['examyear']=$examyear;
switch($type){
case 1: //普高计划人数
$nums=$Plan->where($condition)->getField('num1');
break;
case 2: //职高计划人数
$nums=$Plan->where($condition)->getField('num2');
break;
}
return $nums;
}
/**
统计各专业人数并封装数组
**/
public function getExamineeCountsArr(){
$majorArr=$this->getMajorInfo();
$examyearArr=$this->getExamyear();
$i=0;
foreach($majorArr as $value){
$arr[$i]['major']=$value['major']; //专业
foreach($examyearArr as $v){ //年份
$arr[$i][$v]['nums1']=$this->getMajorNums($value['major'],$v,1); //普高计划人数
$arr[$i][$v]['nums2']=$this->getMajorNums($value['major'],$v,2); //职高计划人数
$arr[$i][$v]['nums3']=$this->getMajorCounts($value['major'],$v,1,1); //报名总人数 普高
$arr[$i][$v]['nums4']=$this->getMajorCounts($value['major'],$v,1,2); //报名总人数 职高
$arr[$i][$v]['nums5']=$this->getMajorCounts($value['major'],$v,2,1); //通过审核总人数 普高
$arr[$i][$v]['nums6']=$this->getMajorCounts($value['major'],$v,2,2); //通过审核总人数 职高
$arr[$i][$v]['nums7']=$this->getMajorCounts($value['major'],$v,3,1); //已报到人数 普高
$arr[$i][$v]['nums8']=$this->getMajorCounts($value['major'],$v,3,2); //已报到人数 职高
$arr[$i][$v]['nums9']=$this->getMajorCounts($value['major'],$v,4,1); //录取总人数 普高
$arr[$i][$v]['nums10']=$this->getMajorCounts($value['major'],$v,4,2); //录取总人数 职高
}
$i++;
}
return $arr;
}
}
?>
SubtotalController.class.php
该控制器调用以上统计的方法:
/***
专业人数统计,包括入学性质
***/
public function majorCounts()
$ExamineeLogic=D("Examinee","Logic");
$this->assign('examineeCountsArr',$ExamineeLogic->getExamineeCountsArr());
$this->display("Subtotal/majorCounts");
}
majorCounts.html
模板页输出:
<table class="table table-bordered table-striped" id="table-info">
<thead><tr><th rowspan="2">序号</th><th rowspan="2">专业</th><th colspan="5" class="year">2016(普高|职高)</th><th colspan="5" class="year">2017(普高|职高)</th></tr>
<tr><th class="planNum">计划数</th><th class="regNum">报名人数</th><th class="ispassNum">通过审核人数</th><th class="isregisterNum">已报到的人数</th><th class="enrollNum">录取人数</th>
<th class="planNum">计划数</th><th class="regNum">报名人数</th><th class="ispassNum">通过审核人数</th><th class="isregisterNum">已报到的人数</th><th class="enrollNum">录取人数</th>
</tr>
</thead>
<tbody>
<volist name="examineeCountsArr" id="vo">
<tr>
<td>{$i}</td>
<td>{$vo.major}</td>
<td class="planNum">{$vo[2016].nums1}|{$vo[2016].nums2}</td>
<td class="regNum">{$vo[2016].nums3}|{$vo[2016].nums4}</td>
<td class="ispassNum">{$vo[2016].nums5}|{$vo[2016].nums6}</td>
<td class="isregisterNum">{$vo[2016].nums7}|{$vo[2016].nums8}</td>
<td class="enrollNum">{$vo[2016].nums9}|{$vo[2016].nums10}</td>
<td class="planNum">{$vo[2017].nums1}|{$vo[2017].nums2}</td>
<td class="regNum">{$vo[2017].nums3}|{$vo[2017].nums4}</td>
<td class="ispassNum">{$vo[2017].nums5}|{$vo[2017].nums6}</td>
<td class="isregisterNum">{$vo[2017].nums7}|{$vo[2017].nums8}</td>
<td class="enrollNum">{$vo[2017].nums9}|{$vo[2017].nums10}</td>
</tr>
</volist>
</tbody>
</table>