2014-10-31 3 views
0

В MySQL Я пытаюсь получить количество строк в forum_posts, где идентификатор равен post_id столбец в forum_posts_threads, где thread_id колонна равна thread_id столбец в forum_threads_forums, где forum_id столбца соответствует определенную ценность. В качестве иллюстрации:MySQL комплекс несколько столов

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

Если вы замените «таблицу 1», «таблицу 2» и т. Д. В первом абзаце с фактическими именами таблиц, ваш вопрос будет намного яснее. – Tom

+0

@Tom Я буду, извините за любую путаницу – Qub1

ответ

1

I думаю вы пытаетесь подсчитать количество сообщений с нитями в forum_threads_forums. Есть несколько способов сделать это.

Самый простой способ - это просто присоединиться к таблице forum_posts_threads и сделать COUNT DISTINCT на post_id. Вам также придется изменить свой thread_count, чтобы сделать COUNT DISTINCT из-за Cartesians.

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 
Смежные вопросы