В MySQL я пытаюсь получить количество строк в forum_posts
где идентификатор равен post_id
колонка в forum_posts_threads
, где thread_id
столбец равен thread_id
колонка в forum_threads_forums
, где forum_id
столбец соответствует определенному значению. Проиллюстрировать:
forum_forums
id name
1 forum1
2 forum2
forum_threads
id title
1 thread1
2 thread2
forum_threads_forums
thread_id forum_id
1 1
1 2
2 2
forum_posts
id title
1 post1
2 post2
forum_posts_threads
post_id thread_id
1 1
2 1
2 2
Затем я выполняю запрос, который получает все форумы. Что бы я хотел, это чтобы посчитать количество постов на каждом форуме.
Итак, нужно будет вернуть что-то вроде этого:
id name post_count
1 forum1 2
2 forum2 3
У меня уже есть следующий запрос:
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
Запрос уже в состоянии подсчитать количество потоков (и делать некоторые другие вещи), но я не уверен, как подсчитывать сообщения, так как он должен проверить условие в двух отдельных таблицах.
Так что, если бы кто-нибудь мог дать несколько советов о том, как настроить мой запрос, это было бы здорово.
Заранее спасибо!
я считать Вы пытаетесь подсчитать количество сообщений с темами в forum_threads_forums. Есть несколько способов сделать это.
Самый простой способ, вероятно, просто присоединиться к таблице forum_posts_threads и сделать COUNT DISTINCT
на post_id. Вы также должны изменить свой thread_count, чтобы сделать COUNT DISTINCT
из-за декартов
SELECT
forum_forums.id,
forum_forums.name,
forum_forums.description,
COUNT(DISTINCT forum_threads_forums.thread_id) AS thread_count,
COUNT(DISTINCT forum_posts_threads.post_id) AS post_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
LEFT OUTER JOIN
forum_posts_threads
ON
forum_threads_forums.thread_id=forum_posts_threads.thread_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
Если есть какие-то критерии, которые необходимо применить к таблице forum_posts, вместо этого вы должны добавить подзапрос в свой SELECT
пункт. Как то так (добавьте в свой WHERE
пункт ниже). Это будет ссылаться на forum_threads_forums.thread_id от вашего главного FROM
пункт.
(SELECT COUNT(DISTINCT forum_posts.post_id ) post_count
FROM forum_posts
JOIN forum_post_threads ON forum_posts.post_id = forum_post_threads.post_id
WHERE forum_post_threads.thread_id = forum_threads_forums.thread_id
[ADD IN YOUR ADDITIONAL WHERE CONDITIONS]
) as post_count
Других решений пока нет …