Несколько / Подзапросы с 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
}