Создание подзапроса Codeigniter - PullRequest
0 голосов
/ 16 января 2020

Я разработал следующий запрос (в codeigniter) для получения различной статистики базы данных из различных таблиц, которые представлены в таблице html. Теперь запрос работает, но должен быть расширен в будущем.

Я вполне уверен, что код «как есть» не является лучшей практикой и должен быть возможен в одном запросе. По мере дальнейшего расширения отчета количество запросов к базе данных становится излишне высоким. Тем не менее, я изо всех сил пытался изменить код для использования подзапросов, преобразовав его в один запрос к базе данных.

В общих чертах:

  1. В одной таблице есть группы экспертов
  2. Документы в другой таблице (каждый из которых содержит идентификатор, связывающий их с группой экспертов)
  3. Таблица загрузок, каждая строка загружается и содержит идентификатор документа.
  4. И есть участники таблица, связывающая участников с группами в (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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...