Как рассчитать общее количество присутствующих из базы данных в Codeigniter - PullRequest
0 голосов
/ 02 ноября 2018

Привет, у меня есть стол, где мне нужно сосчитать всех присутствующих, чтобы показать, сколько учеников посещают

В моей таблице есть следующий столбец

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

запись идет раз в месяц. лайк если новый месяц новый ряд создать еще обновление в день_ 1 день_2 день_3 и т. д. This is table to how i insert data in table

Ответы [ 4 ]

0 голосов
/ 02 ноября 2018

Вы можете сделать запрос, чтобы получить идентификаторы всех студентов,

$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 для генерации другого SQL-запроса. с предложением where.

$sql = "SELECT table.* from table where id = ".$row->id;
$query = $this->db->query($sql);
foreach ($query->result() as $row) {
  print your data
}
0 голосов
/ 02 ноября 2018

Вот другой трюк. Хотя это для 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
0 голосов
/ 02 ноября 2018

Более традиционный подход может выглядеть примерно так:

student_id,
attendance_date
0 голосов
/ 02 ноября 2018

написать запрос, чтобы найти посещаемость с подарком, как

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. Точный результат вы получите ..

In 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, год, месяц, статус ");
$ This-> db-> Get ( 'table_name');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...