Я разработал следующий запрос (в codeigniter) для получения различной статистики базы данных из различных таблиц, которые представлены в таблице html. Теперь запрос работает, но должен быть расширен в будущем.
Я вполне уверен, что код «как есть» не является лучшей практикой и должен быть возможен в одном запросе. По мере дальнейшего расширения отчета количество запросов к базе данных становится излишне высоким. Тем не менее, я изо всех сил пытался изменить код для использования подзапросов, преобразовав его в один запрос к базе данных.
В общих чертах:
- В одной таблице есть группы экспертов
- Документы в другой таблице (каждый из которых содержит идентификатор, связывающий их с группой экспертов)
- Таблица загрузок, каждая строка загружается и содержит идентификатор документа.
- И есть участники таблица, связывающая участников с группами в (1).
Любые идеи о том, как это можно решить?
Код ниже;
$this->db->select('eg.exGroupId, eg.groupName')->from('expertGroups eg');
$this->db->join('documents do', 'do.expertGroupId = eg.exGroupId');
$this->db->where('do.documentType', 1);
$this->db->group_by('eg.exGroupId');
$this->db->order_by('eg.groupName');
$query = $this->db->get();
$results = array();
foreach ($query->result() as $expertGroup) {
$groupId = $expertGroup->exGroupId;
$groupName = $expertGroup->groupName;
$this->db->select('dw.downloadId')->from('downloads dw');
$this->db->join('documents do', 'do.documentId = dw.documentId');
$this->db->where('do.expertGroupId', $groupId);
$totalDownloads = $this->db->count_all_results();
$this->db->select('exGroupPartId')->from('expertGroupParticipation');
$this->db->where('exGroupId', $groupId);
$expertsTotal = $this->db->count_all_results();
array_push($results, $groupName . '.' . $totalDownloads . '.' . $expertsTotal);
}
return $results;