Как рассчитать количество столбцов в базе данных с конкретными значениями (Запрос) - PullRequest
0 голосов
/ 15 мая 2019

У меня есть таблица tbl_student и таблица, в которой ученики берут учебный год из таблицы.

здесь tbl_student:

|id_st   | student_name  |  year  | status |
--------------------------------------------
| 501    | John Carlton  |   1    |    1   |
--------------------------------------------
| 502    | Harold Louis  |   2    |    1   |
--------------------------------------------
| 503    | Jackson F     |   2    |    0   |
--------------------------------------------

, а вот tbl_year:

|id_year | year_name | 
----------------------
| 1      | 2001      |
----------------------   
| 2      | 2002      |
----------------------  
| 3      | 2003      |
----------------------  

я хочу, чтобы я мог подсчитывать количество активных студентов (со значениями статуса столбца = 1) каждый год, я пытался рассчитать его с помощью своего запроса, но получаю подсчет числа студентов загод, вот мой текущий запрос:

открытая функция getStudentActive () {

    $sql = "SELECT b.year_name as year, count(a.status=1) as total from tbl_student as a left join tbl_year as b on b.id_year=a.year GROUP BY a.tbl_year ORDER BY year ASC" ;
    return $this->db->query($sql)->result();
}

, но в результате запрос по-прежнему учитывает общее количество студентов в год, все, что я хочу, эточто я могу вычислить значение 1 в столбце статуса в таблице ученика.

Ваша помощь будет много значить для меня, спасибо!И извините, если написание моего вопроса не аккуратно, и извините за мой плохой английский ... с любовью ~ Джон Гарольд.

Ответы [ 4 ]

1 голос
/ 15 мая 2019

Ваша проблема в том, что вы COUNT используете логическое выражение: a.status=1, которое всегда будет считать 1 (если a.status не равно нулю), независимо от того, является ли выражение истинным или ложным. Вместо COUNT этих значений, SUM их вместо:

$sql = "SELECT b.year_name as year, SUM(a.status=1) as total 
        from tbl_student as a 
        left join tbl_year as b on b.id_year=a.year
        GROUP BY a.tbl_year 
        ORDER BY year ASC" ;
0 голосов
/ 16 мая 2019
$sql = "SELECT count(*),year.year_name FROM `student` INNER JOIN year on student.year = year.id where student.status = '1' GROUP BY student.year" ;
return $this->db->query($sql)->result();
0 голосов
/ 15 мая 2019

В контроллере добавьте этот код:

$activeStudents = $this->student_model->count_student_active(array('status'=>1);

Добавьте этот код в student_model:

public function count_student_active($where)
   {

       $this->db->select();

       $this->db->from('tbl_student');

       $query = $this->db->get_where('', $where);

       $result = $query->num_rows();

       return $result;

   }
0 голосов
/ 15 мая 2019

Если у вашей ученической таблицы только 1 и 0 статус, итоговое значение столбца статуса - это просто желаемый результат, который представляет собой количество активных учеников в год. Как показано ниже:

select
    a.year_name,
    sum(b.status) as active_student_count
from
    tbl_year a
left join
    tbl_student b on a.id_year = b.year
group by
    a.year_name

И если ваш статус студента не только два значения, а также имеет другой статус, например 2,3,4 ... и только 1 представляет активный статус, вы можете использовать выражения «case when» в вашем SQL , как показано ниже:

select
    a.year_name,
    sum(case when b.status=1 then 1 else 0 end) as active_student_count
from
    tbl_year a
left join
    tbl_student b on a.id_year = b.year
group by
    a.year_name

Просто надеюсь, что это сработает для вас.

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