Codeigniter выбирает, подсчитывает и показывает двумерный массив

#codeigniter #select #multidimensional-array #count

#codeigniter #выберите #многомерный массив #подсчитывает

Вопрос:

У меня есть три таблицы:

 worker_tb                        dept_tb
------------------               -----------------------
| id_worker| sex |               | id_dept | dept_name |
------------------               -----------------------
|    1     |  w  |               |    1    | Marketing |
|    2     |  m  |               |    2    | Manager   |
|    3     |  w  |               -----------------------
|    4     |  m  |
|    5     |  w  |
------------------

job_tb
--------------------------------
| id_job | id_worker | id_dept |
--------------------------------
|    1   |     1     |    1    |
|    2   |     2     |    2    |
|    3   |     3     |    2    |
|    4   |     4     |    1    |
|    5   |     5     |    1    |
--------------------------------
  

Мой контроллер:

 public function count_sex()
    {
        $data['count_sex_dept'] = $this->m_worker->count_sex_dept();
        $this->load->view('count_sex', $data);
    }
  

Моя модель:

 public function count_sex_dept()
    {
        $this->db->select('*, COUNT(sex) as count_sex', FALSE);
        $this->db->from('worker_tb');
        $this->db->join('job_tb', 'job_tb.id_worker = worker_tb.id_worker');
        $this->db->join('dept_tb', 'dept_tb.id_dept = job_tb.id_dept');
        $this->db->group_by('sex');
        $query = $this->db->get();
        if ($query->num_rows() >0)
        {
            foreach ($query->result() as $data)
            {
                $count_sex_dept[] = $data;
            }
            return $count_sex_dept;
        }
    }
  

Мой взгляд:

 <div class="col-md-12">
    <?php foreach($count_sex_dept as $sd) {
        if ($sd->gender == '1'){$sex = 'Man';}
        else {$sex = 'Woman';}  
    ?>
    <div class="row">
        <div class="col-md-4">
        <label class="font-weight-bold"><?php echo $sex; ?></label>
    </div>
    <div class="col-md-8">
        <p><?php echo $sd->count_sex; ?></p>
    </div>
</div>
     <?php } ?>
</div>
  

СООБЩЕНИЯ ОБ ОШИБКАХ:

Номер ошибки: 1055

Выражение # 1 списка ВЫБОРА отсутствует в предложении GROUP BY и содержит неагрегированный столбец ‘web_db2.tb_karyawan.id_kyw’, который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode=only_full_group_by

Но это не работает. Что я должен сделать, чтобы показать этот результат?

 -----------------------------
| dept_name | male | female |
-----------------------------
| Marketing |  2   |    1   |
| Manager   |  1   |    1   |
-----------------------------
  

Комментарии:

1. если поместить echo '<pre>';print_r($query->result);die; сразу после $query = $this->db->get(); , что это выдает?

2. Он показывает сообщение об ошибке: Database Error Error Number: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'dbase.tb_worker.id_worker' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by SELECT *, COUNT(sex) as count_sex FROM worker_tb` JOIN job_tb ON job_tb . id_worker = worker_tb . id_worker JOIN dept_tb ON dept_tb . id_dept = worker_tb . id_dept ГРУППИРОВАТЬ ПО sex имени файла: C:/laragon/www/web/system/database/DB_driver.php Номер строки: 691`

3. Я думаю, вам следует использовать GROUP BY count_sex. Также при выборе вы должны использовать имя таблицы: COUNT(worker_tb.sex) как count_sex