Несколько / Подзапросы с codeigniter

Я только начал с Codeigniter, и это сводит меня с ума. У меня есть запрос, который определяет, купил ли пользователь какие-либо программы. Затем мне нужно использовать категорию типа этой программы для запуска и определить, сколько раз он или она записывали запрос в другую таблицу. Извините за путаницу, но, надеюсь, код имеет смысл.

У меня проблемы с возвратом двух массивов из моей Модели в мой Контроллер, очевидно, на представление.

function specificPrograms() {
$specific_sql = $this->db->query("SELECT program,created FROM  `assessment`  WHERE uid = $this->uid");
if($specific_sql->num_rows() > 0) {
foreach ($specific_sql->result() as $specific) {        
$data[] = $specific;
$this->type = $specific->program;   
}
return $data;
}   

$sub_sql = $this->db->query("SELECT id FROM othertable WHERE user_id_fk = $this->uid and type = '$this->type'");
if($sub_sql->num_rows() > 0) {
foreach ($sub_sql->result() as $otherp) {       
$data[] = $otherp;
}
return $data;
}

}

Тогда в моем контроллере у меня есть,

$data['specific'] = $this->user_model->specificPrograms();
$data['otherp'] = $this->user_model->specificPrograms();

Спасибо за любую помощь.

1 ответ

Решение

Основываясь на ваших комментариях выше, я предлагаю один запрос, который возвращает нужные вам результаты. Результирующий набор этого будет выглядеть так:

+----------+------------+------+
| program  | created    | uses |
+----------+------------+------+
| football | 2001-01-01 | 12   |
+----------+------------+------+
| baseball | 2007-01-01 | 21   |
+----------+------------+------+


SELECT 
  assessment.program, 
  assessment.created, 
  count(othertable.user_id) as uses
FROM  assessment
JOIN othertable 
  ON othertable.user_id_fk = assessment.uid
  AND othertable.type = assessment.program
WHERE assessment.uid = $this->uid
GROUP BY assessment.program

... model ...

function specificPrograms() {
  $results = $this->db->query($sql_from_above);
  if($specific_sql->num_rows() > 0) {
  foreach ($specific_sql->result() as $program_data) {        
    $data[] = $program_data;
  }
  return $data;
}

... meanwhile in controller ...


$programs_used = $this->user_model->specificPrograms();
foreach($programs_used as $program_use_data) {
  // On first iteration, this is true:
  // $program_use_data['program'] == "football"
  // $program_use_date['uses'] == 12
}
Другие вопросы по тегам