如何解决如何分别计算一列中的值取决于 codiegniter 中的值?
这是我的表,我想从这张表中计算 attendance_status_id
,其中年份 1399
和 attendance_status_id
的值是相同的。例如在这个表中,两个 attendance_status_id
具有相同的值 1
,所以当我把它算作 present_status
而另一个是 2
算作 absent_status
我该怎么做?
这是我的功能:
public function get_student_attendance_daily_report($data)
{
return $this->db->select('sda.id sda_id,st_id,student.student_id,student.name,last_name,fname,school_class_fa_name,year,COUNT(attendance_status_id) as at_s_id,attendance_status_id,date,description')
->from('student_daily_attendance sda')
->join('student','student.st_id=sda.student_id')
->join('school_class','school_class.school_class_id=sda.school_class_id')
->join('jalali_months','jalali_months.id=sda.month_id')
->where('sda.year',$data['edu_year'])
->where('sda.school_class_id',$data['grades'])
->where('sda.class_id',$data['class'])
->order_by('sda.id','desc')
->group_by('sda.student_id,sda.attendance_status_id')
->get()->result_array();
}
结果如下:
array (
'Total' => 36,)array (
0 =>
array (
'sda_id' => '85','st_id' => '858','student_id' => 'S99888','name' => 'ٌsafa','last_name' => 'ahmadi','fname' => 'َabdullah','school_class_fa_name' => 'first class','year' => '1399','at_s_id' => '1','attendance_status_id' => '1',),.
.
.
10 =>
array (
'sda_id' => '26','attendance_status_id' => '2',.
.
.
)
如您所见,这两个数组中的所有数据都相同,除了 attendance_status_id
。
所以我想知道如何查询并将它们显示在一行中,如下所示:
|st_id|student_id|name|last_name|fname|school_class_fa_name|year|at_s_id|attendance_status_id(that value is 1)|attendance_status_id(value is tow)|
|-----|----------|----|---------|-----|--------------------|----|-------|--------------------------------------|----------------------------------|
|858|S99888|safa|ahmadi|abdullah|first class|1399|1|1|2|
解决方法
您可以使用以下查询来解决您的问题。
return $this->db->select('sda.id sda_id,st_id,student.student_id,student.name,last_name,fname,school_class_fa_name,year,SUM(CASE attendance_status_id
WHEN "1" THEN 1
ELSE 0
END) AS present,SUM(CASE attendance_status_id
WHEN "2" THEN 1
ELSE 0
END) AS absent,SUM(CASE attendance_status_id
WHEN "3" THEN 1
ELSE 0
END) AS sick,SUM(CASE attendance_status_id
WHEN "4" THEN 1
ELSE 0
END) AS st_leave,attendance_status_id,date,description')
->from('student_daily_attendance sda')
->join('student','student.st_id=sda.student_id')
->join('school_class','school_class.school_class_id=sda.school_class_id')
->join('jalali_months','jalali_months.id=sda.month_id')
->where('sda.year',$data['edu_year'])
->where('sda.school_class_id',$data['grades'])
->where('sda.class_id',$data['class'])
->order_by('sda.id','desc')
->group_by('sda.student_id')
->get()->result_array();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。