php - 计算特定值并分别显示
问题描述
我有以下表格项目(project_id,project_name) 任务(tid,project_id,status)
我想计算每个状态(进行中、完成、待定)并显示在单独的列中
我的尝试:
控制器:
public function overview(){
$data['main_view'] = 'projects/overview';
$data['data']=$this->project_model->get_data();
$this->load->view('layouts/main' , $data);
}
看法:
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>Project Name</th>
<th>Client Name</th>
<th>Due</th>
<th>Pending Tasks</th>
<th>In progress Tasks</th>
<th>Completed</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $row): ?>
<tr>
<td><?php echo $row->project_id ?></td>
<td><?php echo $row->project_name ?></td>
<td><?php echo $row->name ?></td>
<td><?php echo $row->due_date ?></td>
<td><?php echo $row->pending_tasks ?></td>
<td><?php echo $row->in_progress ?></td>
<td><?php echo $row->completed_tasks ?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
模型:
public function get_data(){
$status = array(
'status' =>'Completed' ,
'status' =>'Pending',
'status' =>'In progress'
);
$this->db->select("projects.*,Count('tasks.*') as pending_tasks,Count('tasks.*') as completed_tasks,Count('tasks.*') as in_progress,clients.name");
$this->db->join('tasks','tasks.project_id=projects.project_id');
$this->db->join('clients','clients.id=projects.client_id');
$this->db->where_IN(['tasks.status'=> $status]);
$this->db->group_by('tasks.project_id');
$q =$this->db->get('projects');
return $q->result();
}
我得到的结果是每列中具有相应状态的任务总数。它没有分裂
解决方案
在您的选择中使用 SUM IF(或 CASE WHEN):
$this->db->select("projects.*,COUNT(SUM(IF(tasks.status='Pending',1,0))) as pending_tasks,COUNT(SUM(IF(tasks.status='Completed',1,0))) as completed_tasks,COUNT(SUM(IF(tasks.status='In progress',1,0))) as in_progress,clients.name");
这仅计算与条件匹配的行。请参阅https://www.w3schools.com/sql/func_mysql_if.asp。
推荐阅读
- java - 将元素从一个数组列表移动到另一个 java
- c++ - c++中的正弦波生成
- android - AdMob 激励视频广告上限
- excel - SAPUI5 的 Sheetjs;将表格数据导出到电子表格
- router - Snort 错误:spp_session.c(2567) 无法初始化协议会话内存池
- tensorflow - 使用新类重新训练模型
- javascript - 如何在 plotly.js 中为 3D 图表设置多个轴
- html - 当我将鼠标悬停在帮助图标上时,工具提示隐藏在标题选项卡后面
- javascript - 将输入值存储在具有离子角 5 的数组中
- javascript - js正则表达式'|' 当任何一方匹配时匹配