嗨,我有一张桌子,我需要在这里计数所有出席人数,以显示有多少出勤学生
在我的表中有“关注列”
school id
Student id
year
Month
Status
day_1
day_2
day_3
To
day_31
答案 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');