MySQL сложный многостоловый подсчет

В 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

Запрос уже в состоянии подсчитать количество потоков (и делать некоторые другие вещи), но я не уверен, как подсчитывать сообщения, так как он должен проверить условие в двух отдельных таблицах.

Так что, если бы кто-нибудь мог дать несколько советов о том, как настроить мой запрос, это было бы здорово.

Заранее спасибо!

0

Решение

я считать Вы пытаетесь подсчитать количество сообщений с темами в 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]