Количество записей в категории. Нужна помощь

#1 19 ноября 2014 в 16:41
Здравствуете, помогите понять алгоритм вывода количество записей из категории, например:
Музыка (20)
Фильмы (10)
Сериалы (50)

Сам я делаю так:
Получаю список категории в массив $cats и внутри цикла foreach выполняю SQL запрос для выбора записей у которых cat_id = $cat['id']
Всё получается но думаю это не оптимальный вариант, так как в отладке вижу что выполняются много SQL запросов.

Может есть более простое решение?
#2 19 ноября 2014 в 18:06
Очень интересная тема, ребята подключайтесь, нужно ведь для двойки сделать качественное меню категорий контента с показом, кол-ва этого контента в категориях. Готов подкинуть 500wmr в фонд разработчиков меню v
#3 19 ноября 2014 в 18:15
Как-то так очевидно
  1. SELECT cat_id, COUNT(id) AS summ FROM you_table GROUP BY cat_id;
#4 19 ноября 2014 в 18:52
Pasha, Спасибо, работает) с меня плюс
#5 19 ноября 2014 в 20:04
Pasha, А можно ли как нибудь сделать выборку из таблицы категория?
Данный запрос работает для выбора например из cms_con_articles
Как мне сделать выборку из таблицы cms_con_articles_cats и при этом считать количество записей этой категории из таблицы cms_con_articles по category_id
Извиняюсь если вопросы очень тупые) я не силен в SQL
#6 19 ноября 2014 в 20:41
Все это делается при помощи объединения (JOIN), но ничего конкретного не скажу так как для этого как минимум нужно видеть таблицы, а я двойку пока не ставил.
#7 19 ноября 2014 в 20:45
Можете на примере первой ветки показать, или может знаете ссылку на какую нибудь статью про это?
Я пробую так но не помогает
  1.  
  2. SELECT i.*, COUNT(s.id) AS summ FROM cms_con_articles_cats i
  3. INNER JOIN cms_con_articles as s ON i.id = s.category_id
  4. GROUP BY s.category_id
  5.  
#8 19 ноября 2014 в 21:22
Evanescence, я ведь понятия не имею что и зачем вы делаете… Ну да не суть. Например мы хотим вытащить все материалы сайта и узнать кол-во комментариев к каждому из них, тогда запрос должен быть таким:
  1.  
  2. SELECT cc.id,
  3. cc.title,
  4. COUNT(cm.id) AS comments
  5. FROM cms_content cc
  6. LEFT JOIN cms_comments cm ON cm.target_id = cc.id AND cm.target = 'article'
  7. GROUP BY cc.id
  8. ORDER BY cc.title
  9.  
Иными словами остается все та же связка COUNT и GROUP BY, а уж как там все это разруливать в конкретно вашей ситуации смотрите сами.
#9 20 ноября 2014 в 13:37
Evanescence http://roothelp.ru/lessons_post.php?id=86 так быстрее поймете, что к чему конкретно к Вашему случаю
#10 12 июня 2016 в 10:44
Что-то друзья я не совсем понял, как правильно в двойке сформировать вывод количества записей в категории и подкатегориях????

Нужно джоинить таблицу "..cats_bind", но это будет только для последнего уровня вложения
#11 12 июня 2016 в 11:09
Сделал так:

  1.  
  2. joinLeft('con_{ctype}_cats_bind', 'c', 'c.category_id = i.id');
  3. select('COUNT(item_id)', 'count');
  4. groupBy('id');
  5.  
Но количество выводиться как я и говорил только в категориях, в которых непосредственно находиться запись, а в родительских категориях количество не выводиться. Нужна помощь!!!
#12 12 июня 2016 в 11:20
Вадим Нарочный, Вот как я сделал для одного проекта
  1. if($cat_id && $cat_id != 1){
  2. $model->table_prefix = '';
  3. $cat = $model->getItemById('board_cats', $cat_id);
  4. $model->filterCategory('board', $cat, true);
  5. }
  6. $items = $model->getCount('board');
мне нужна была количество записей категории + подкатегории...
Посмотрите функцию filterCategory думаю вам поможет
#13 12 июня 2016 в 11:33


Вадим Нарочный, Вот как я сделал для одного проекта

  1. if($cat_id && $cat_id != 1){
  2. $model->table_prefix = '';
  3. $cat = $model->getItemById('board_cats', $cat_id);
  4. $model->filterCategory('board', $cat, true);
  5. }
  6. $items = $model->getCount('board');
мне нужна была количество записей категории + подкатегории...
Посмотрите функцию filterCategory думаю вам поможет

Evanescence

Мне нужно вывести количество записей в дереве категорий, а не на странице!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.