如何在Codeigniter中计算数据库中的当前总出席人数

时间:2018-11-02 12:25:50

标签: mysql sql database codeigniter mysqli

嗨,我有一张桌子,我需要在这里计数所有出席人数,以显示有多少出勤学生

在我的表中有“关注列”

 school id
 Student id   
 year 
 Month 
 Status
 day_1
 day_2
 day_3
 To 
 day_31

一个月进入一次。喜欢  如果创建新月新行 否则在day_ 1 day_2 day_3中更新,依此类推。 This is table to how i insert data in table

4 个答案:

答案 0 :(得分:0)

这是一个不同的把戏。虽然适用于MySql 8.0 +

将day_n字段合并为一个字符串。
然后从该字符串中删除所有不是'P'的字符。
然后,剩余字符串的字符长度将为总的'P'。

SELECT school_id, student_id, month, year, 
 CHAR_LENGTH(
    REGEXP_REPLACE(
      CONCAT_WS('' -- using concat_ws because concat returns null when one of the fields is null
        , day_1
        , day_2
        -- add more day_n here
        , day_31),'[^P]+','')) AS present
FROM YourTable

答案 1 :(得分:0)

更常规的方法可能看起来像这样:

student_id,
attendance_date

答案 2 :(得分:0)

您可以进行查询以获取所有学生的ID,

$sql2 = "SELECT distinct id from table";
$query = $this->db->query($sql2);
foreach ($query->result() as $innerrow) { 
  HERE YOU USE THE SYNTAX OF NEXT CODE-BLOCK
}

在foreach循环中,您可以将id与$row->id一起使用以生成另一个sql查询 带有where子句。

$sql = "SELECT table.* from table where id = ".$row->id;
$query = $this->db->query($sql);
foreach ($query->result() as $row) {
  print your data
}

答案 3 :(得分:-1)

编写查询以查找出席者,如

select (if(day_1 in('P'),1,0)+if(day_2 in('P'),1,0)+if(day_3 in('P'),1,0)+if(day_4 in('P'),1,0)+if(day_5 in('P'),1,0)+if(day_6 in('P'),1,0) + if(day_7 in('P'),1,0)+if(day_8 in('P'),1,0)+if(day_9 in('P'),1,0)+....+if(day_n in('P'),1,0)) as day_present from tbl_name

但是如果条件为所有31天或每月30天,  只要在您的mysql查询编辑器中尝试一次,您就会获得确切的结果。.

在codeigniter中
$ result = $ this-> db-> select(“(if(day(day_1 in('P'),1,0)+ if(day_2 in('P'),1,0)+ if(day_3 in(' P'),1,0)+ if(day_4 in('P'),1,0)+ ........ + if(day_n in('P'),1,0)) ,school_id,student_id,年,月,状态”);
$ this-> db-> get('table_name');