【问题标题】:How To Count Total Present Attendance From Database如何从数据库中计算总出席人数
【发布时间】:2018-11-02 12:25:49
【问题描述】:

我有一张表,我需要计算所有在场的学生,以显示有多少出勤学生

在我的表中有以下列

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

条目每月进行一次。喜欢 如果新月新行创建 否则在 day_1 day_2 day_3 等更新。

【问题讨论】:

  • 考虑规范化您的架构。请记住,数据库表不是电子表格

标签: mysql sql codeigniter


【解决方案1】:

这是一个不同的技巧。虽然它适用于 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

【讨论】:

    【解决方案2】:

    更传统的方法可能如下所示:

    student_id,
    attendance_date
    

    【讨论】:

      【解决方案3】:

      您可以查询所有学生的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 循环中,您可以使用带有 $row->id 的 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
      }
      

      【讨论】:

      • 嗨,它错了先生,我只需要一个简单的查询,我可以计算所有存在于我的表中我有 day_1 = p day_2 = A day_3 = P To day_31 查询计算 day_(daynumber) 与列中的所有 P 不是行先生
      • 那么你可以使用 group by 作为天数,选择天数并计算 p 并使用 select 子句只计算你需要的数据
      【解决方案4】:

      编写查询以查找出席的出席者像

      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

      但是 if 条件适用于所有 31 天或 30 天,按月天数计算 只需在您的 mysql 查询编辑器中尝试一次,您就会得到准确的结果。。

      在codeigniter中
      $result = $this->db->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_n in('P'),1,0)) 存在, school_id, student_id,year, month, status");
      $this->db->get('table_name');

      【讨论】:

      • 嗨,我想计算所有列(day_1,day_2,day_3 到 day_31)与所有 P 请进行适当的查询
      • 请解释一下您需要数据库中的哪些字段,并且您希望在 codeigniter 中进行查询或只是简单查询...
      • 我的表结构id int(11) NOT NULL, school_id int(11) NOT NULL, teacher_id int(11) NOT NULL, academic_year_id int(11) NOT NULL , month varchar(10) 字符集 utf8 非空,year varchar(10) 字符集 utf8 非空,day_1 varchar(1) 字符集 utf8 默认空,day_2 varchar(1) 字符集 utf8默认空,day_3varchar(1) 字符集 utf8 默认空,day_4varchar(1) 字符集 utf8 默认空,day_5varchar(1) 字符集 utf8 默认空到day_31
      • 数据为 (48, 1, 20, 3, '10', '2018', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'P',NULL,'P','P',1,'2018 -10-30 16:33:30', '0000-00-00 00:00:00', 1, 0), (49, 1, 20, 3, '11', '2018', 'P', 'P','P','P','P',NULL,'A','P',NULL,NULL,NULL,NULL,NULL,NULL,'P',NULL,NULL,NULL,NULL,空,空,空,空,空,空,空,空,'P',空,空,空,1,'2018-11-01 10:46:29','0000-00-00 00:00 :00', 1, 0),
      • 我只需要统计所有 day_(dayvalue) 有 P 的学生
      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多