abler98
@abler98
Software Engineer

MySQL. Как посчитать кол-во созданных тем в определённой категории форума?

Структура таблицы категорий (forum_categories):
+----+-----------+---------------------+--------------+----------+
| id | parent_id | name                | allow_topics | position |
+----+-----------+---------------------+--------------+----------+
|  1 |      NULL | Жизнь сайта         |            0 |        1 |
|  2 |         1 | Конкурсы            |            1 |        1 |
|  3 |         1 | Вопросы/Предложения |            1 |        2 |
+----+-----------+---------------------+--------------+----------+

Структура таблицы forum_topics:
+----+-------------+---------+-------------+--------+--------+---------------------+---------------------+------------+
| id | category_id | user_id | title       | pinned | locked | created_at          | updated_at          | deleted_at |
+----+-------------+---------+-------------+--------+--------+---------------------+---------------------+------------+
|  1 |           2 |       1 | FIRST TITLE |      0 |      0 | 2016-01-18 08:03:53 | 2016-01-18 08:03:53 | NULL       |
+----+-------------+---------+-------------+--------+--------+---------------------+---------------------+------------+


Задача состоит в том, чтобы посчитать кол-во топиков в определённой категории. Следует учесть, что может быть любая вложенность категорий. То есть примерно так: Форум -> Программирование -> Веб-программирование -> Базы данных -> MySQL и нужно посчитать количество тем в категории "Программирование".

Или может нужно изменить структуру?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
sanchezzzhak
@sanchezzzhak
Ля ля ля...
select count(t.id) as cnt, c.* from forum_categories c 
join forum_topics t ON t.category_id = c.id
group by t.category_id
Ответ написан
@gbondarchuk
Software Engineer
select category.name, count(*) as "topics" from forum_topics topic left join forum_categories category on category.id = topic.category_id group by topic .category_id;

Если нужна вложенность - то сначала ищешь все category_id по которым нужен поиск а потом используешь where topic.category_id in (id1,id2...)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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