我表 student_atendence 表字段是(id,studid,attendence)。
这是我的表 student_atendence :
注意力集中
28 1
31 1
32 1
28 1
31 1
32 1
28 1
31 1
32 1
28 1
31 0
32 1
28 0
31 1
32 1
28 1
31 1
32 0
28 1
31 1
32 0
我想要这样的结果
id studid total 1's total 0's
1 28 6 1
2 31 6 1
3 32 5 2
如何分别获得每个学生的总注意数= 1和注意力= 0?
例如:28 - 6(总共1秒)和1(总计0秒),31 - 6(总共1秒)和1(总计0秒),32 - 5(总共1秒)和2(总计0秒)。
我的控制器代码:
foreach($students as $student){
$cunt1 = DB::table($wys_attendence_table)
->where('studid',$student->id)
->where('amonth',$amonth)
->where('ayear',$ayear)
->where('attendence','=',1)
->count();
$cunt0 = DB::table($wys_attendence_table)
->where('studid',$student->id)
->where('amonth',$amonth)
->where('ayear',$ayear)
->where('attendence','=',0)
->count();
//var_dump($cunt1);
//var_dump($cunt0);
}
我的观点页面:
@foreach($stud_attend as $stud_attends)
@if($student->id == $stud_attends->studid)
@if($stud_attends->attendence == 1)
<td><font color="green" size="3">p</font></td>
@elseif($stud_attends->attendence == 0)
<td><font color="red" size="3">a</font></td>
@endif
<td>{{$cunt1}}</td>
<td>{{$cunt0}}</td>
@endif
@endforeach
我从var_dump($cunt0)
,var_dump($cunt1)
得到了正确答案,但在视图页面中无效。
答案 0 :(得分:1)
你可以使用像这样的条件计数
http://sqlfiddle.com/#!9/9d3c1/2
SELECT
studid,
sum(attendence = 1) AS `total 1's`,
sum(attendence = 0) AS `total 0's`
FROM
student_atendence
GROUP BY
studid;
我不确定您希望在预期结果中显示id
,因为一个studid可以在该表中分配许多ID。如果您想要最小的一个,可以添加min(id) AS id
以在http://sqlfiddle.com/#!9/9d3c1/4中进行选择,但它没有太大的实际意义。
我没有Laravel的经验,但似乎有可能通过RAW expressions。像(只是在这里猜测):
DB::table($wys_attendence_table)
->select(DB::raw('studid, sum(attendence = 1) AS `total1`, sum(attendence = 0) AS `total0`'))
->where('studid',$student->id)
->where('amonth',$amonth)
->where('ayear',$ayear);
(我更改了别名以便在数组中更好地访问它)
答案 1 :(得分:0)
你也可以使用if condition
选择id,studid,sum(if(attendence = 1,1,0))作为total1,sum(if(attendence = 0,1,0))作为来自student_atendence组的total0由studid;