Как выбрать список каталогов и посчитать количество материалов в каждом?

Есть таблица со списком каталогов статей, и есть таблица со статьями, для каждой из которых указан cat_id. Надо сделать выборку данных для каждого каталога, плюс в этом же запросе для каждого id каталога посчитать количество материалов в нём (соответствующих cat_id в таблице статей).

Написал вот такое:

SELECT article_cats.id, article_cats.url, 
       article_cats.name, article_cats.description,
COUNT(articles.id) AS entries_num
FROM article_cats, articles
WHERE articles.cat_id=article_cats.id


Выдаёт ошибку:
ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'asoft.article_cats.id'; this is incompatible with sql_mode=only_full_group_by


В чём дело, и каким будет правильный запрос?

MySQL 5.7.7
  • Вопрос задан
  • 1266 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Nc_Soft
select id_cat, count(*) from article group by id_cat
Ну и сами категории либо джоином к этому, либо отдельным запросом по идишникам
Ответ написан
select article_cats.id,  count(articles.id) from article_cats 
join articles on articles.cat_id = article_cats.id
where article_cats.published = 1 and articles.published =1
group by  article_cats.id


можно еще и выдернуть данные об статьях с помощью GROUP_CONCAT

select article_cats.id,  count(articles.id), group_concat(articles.id), group_concat(articles.title)  from article_cats 
join articles on articles.cat_id = article_cats.id
where article_cats.published = 1 and articles.published =1
group by  article_cats.id


Но в этом случае нужно учитывать, что при обработке подобных данных, можно невзначай упереться в память или при не корректной обработке получить утечку памяти
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы