У меня есть запрос
return $this->db->select ("SELECT 'c_id','c_name',(select count('a_id') nam from Admin_course_groups where fk_c_id = 'c_id' and fk_g_id = $id)adm from admin_courses");
и выход:
Array
(
[0] => Array
(
[c_id] => 1
[c_name] => Java - Basic Operators
[adm] => 1
)
[1] => Array
(
[c_id] => 3
[c_name] => JAVA Questions and Answers
[adm] => 0
)
[2] => Array
(
[c_id] => 4
[c_name] => Java - Collections Framework
[adm] => 0
)
)
Так что я хочу получить дату начала и дату окончания из этого query.so я попробовал
return $this->db->select ("SELECT 'c_id','c_name',count('a_id') nam,start_date,end_date from admin_courses join Admin_course_groups on fk_c_id = 'c_id' where fk_g_id = $id group by 'a_id'");
Что возвращает только один результат
Array
(
[0] => Array
(
[c_id] => 1
[c_name] => Java - Basic Operators
[nam] => 1
[start_date] => 2018-01-01
[end_date] => 2018-09-25
)
)
Ожидаемый результат
Array
(
[0] => Array
(
[c_id] => 1
[c_name] => Java - Basic Operators
[nam] => 1
[start_date] => 2018-01-01
[end_date] => 2018-09-25
)
[1] => Array
(
[c_id] => 3
[c_name] => JAVA Questions and Answers
[adm] => 0
[start_date] =>
[end_date] =>
)
[2] => Array
(
[c_id] => 4
[c_name] => Java - Collections Framework
[adm] => 0
[start_date] =>
[end_date] =>
)
)
Таблица admin_cursses
c_id | C_name | C_desc | C_status
1 Java - Basic Operators test 1
2 JAVA Questions and Answers test2 1
3 Java - Collections Framework test3 1
Таблица Admin_course_groups
a_id | fk_c_id |fk_g_id|start_date|end_date
1 1 2 2018-01-01 2018-09-25
Любая помощь будет оценена.
У вас есть несколько проблем с вашим запросом, которые приводят к тому, что они не возвращают все нужные вам результаты. Во-первых, вы используете JOIN
и в admin_course_groups
есть только одна соответствующая строка, которая ограничивает вас одной строкой. Вместо этого вы должны использовать LEFT JOIN
. Во-вторых, вы группируете a_id
когда вы должны группировать c_id
. Наконец, после перехода на LEFT JOIN
вам нужно будет изменить WHERE
, чтобы fk_g_id
было NULL
. Этот запрос должен дать нужные результаты:
SELECT 'c_id', 'c_name', COUNT('a_id') AS nam, MIN(start_date), MIN(end_date)
FROM admin_courses c
LEFT JOIN admin_course_groups g
ON g.fk_c_id = c.'c_id'
WHERE fk_g_id = 2 OR fk_g_id IS NULL
GROUP BY 'c_id'
Выход:
c_id c_name nam start_date end_date
1 Java - Basic Operators 1 2018-01-01 2018-09-25
2 JAVA Questions and Answers 0 (null) (null)
3 Java - Collections Framework 0 (null) (null)
group by a_id