Laravel

时间:2015-08-12 08:14:58

标签: php mysql laravel

我表 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)得到了正确答案,但在视图页面中无效。

2 个答案:

答案 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;