#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` JOINjob_tb
ONjob_tb
.id_worker
=worker_tb
.id_worker
JOINdept_tb
ONdept_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