Проблема с группой по MySQL

0

У меня есть запрос

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

Любая помощь будет оценена.

  • 0
    Удалить group by a_id
  • 0
    @MadhurBhaiya не работает Список SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'manage.Admin_course_groups.start_date', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с ошибкой sql_mode = only_full_group_by
Показать ещё 7 комментариев
Теги:

1 ответ

2
Лучший ответ

У вас есть несколько проблем с вашим запросом, которые приводят к тому, что они не возвращают все нужные вам результаты. Во-первых, вы используете 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)

Демоверсия SQLFiddle

  • 0
    спасибо за ваш ответ..но я получил ошибку, как будто список SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'manage.g.start_date', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by
  • 0
    Привет @Shanukk попробуйте мой отредактированный запрос.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню