Я программирую форум на PHP, и поэтому я пришел к той части, где мне нужно будет подсчитать количество потоков в форум. Я использую следующий запрос, чтобы получить все форумы и соответствующие категории:MySQL получает количество всех строк в другой таблице, где значение равно столбцу в текущей таблице
SELECT f.id
, f.name
, f.description
, c.id category_id
, c.name category_name
, c.description category_description
FROM forum_forums f
JOIN forum_forums_categories fc
ON f.id = fc.forum_id
JOIN forum_categories c
ON fc.category_id = c.id;
Он выполняет свою работу, и я тогда в состоянии группировать все в категории. То, что я хочу сделать дальше, также добавляет количество потоков, которые находятся в определенном форуме для каждой строки в результатах, и я не уверен, как это сделать.
У меня есть следующие таблицы: forum_forums
, forum_threads
, forum_categories
. Кроме того, потоки могут принадлежать нескольким форумам (у меня есть таблица forums_threads_forums
, которая связывает определенный thread_id
с forum_id
).
Так что я предполагаю, что мне нужно будет добавить счет в исходной команде где-нибудь. Этот счет должен будет подсчитывать строки в таблице forum_threads_forums
, где forum_id
равно количеству строк текущего форума, который он добавляет к результатам.
Чтобы сделать вещи проще, вот пример того, что я пытаюсь добиться (упрощенно): Таблица: forum_forums
id name
1 forum1
2 forum2
3 forum3
Таблица: forum_threads
id title
1 thread1
2 thread2
Таблица : forum_threads_forums
thread_id forum_id
1 1
1 2
2 1
2 3
Тогда я хотел бы запрос, чтобы вернуться (среди прочего):
forum_forums.id forum_forums.name forum.threads
1 forum1 2
2 forum2 1
3 forum3 1
Если кто-нибудь может подтолкнуть меня в правильном направлении, что было бы здорово.
EDIT:
Я думаю, что, возможно, потребуется подзапрос такой SELECT COUNT(thread_id) AS thread_count FROM forum_threads_forums WHERE forum_id=:forum_id
, но я не уверен, куда поместить это в моем исходном запросе
ОТВЕТ:
Для дальнейшего использования , вот рабочая команда, которую я использую сейчас:
SELECT
forum_forums.id,
forum_forums.name,
forum_forums.description,
COUNT(forum_threads_forums.thread_id) AS thread_count,
forum_categories.id AS category_id,
forum_categories.name AS category_name,
forum_categories.description AS category_description
FROM
forum_forums
LEFT OUTER JOIN
forum_threads_forums
ON
forum_forums.id=forum_threads_forums.forum_id
INNER JOIN
forum_forums_categories
ON
forum_forums.id=forum_forums_categories.forum_id
INNER JOIN
forum_categories
ON
forum_forums_categories.category_id=forum_categories.id
GROUP BY
forum_forums.id
Вы должны быть в состоянии достичь этого с помощью 'COUNT()' и 'GROUP BY' – Phil
@Phil Да, я отредактировал вопрос с помощью Я думаю, что мне нужно, но где бы я тогда включил эту команду в свой первоначальный запрос? Если возможно, я хотел бы избежать необходимости запуска двух отдельных запросов. – Qub1