MySQL Group By с несколькими соединениями

0

вот мой SQL-запрос:

    'SELECT subject, threadpost.date, threadpost.idThreadPost as id,
    threadcategories.category, users.userName, COUNT(idThreadSubs) AS subs, COUNT(idThreadReplies) as replies
    FROM threadpost
      JOIN threadcategories
        ON idthreadcategories = threadpost.category
      JOIN users
        ON idUsers = UserId
      LEFT JOIN threadsubs
        ON threadpost.idThreadPost = threadsubs.ThreadId
      LEFT JOIN threadreplies
        ON threadpost.idThreadPost = threadreplies.ThreadId
    WHERE idthreadcategories LIKE ?
    GROUP BY idThreadPost
    ORDER BY date desc
    LIMIT 20;'

проблема связана с добавлением COUNT (idThreadReplies). Как вы можете видеть, я группирую idThreadPost. Это связано с тем, что я хочу получить как количество подписки на поток, так и количество ответов.

Однако результат дает мне неправильное количество ответов (такое же количество, что и подписки).

Как правильно сформулировать этот запрос?

Теги:

1 ответ

0

догадаться. решение заключается в использовании подзапросов в соединениях, для которых требуется группа:

    'SELECT subject, threadpost.date, threadpost.idThreadPost as id,
    threadcategories.category, users.userName, tsubs.subs AS subs, trep.replies as replies
    FROM threadpost
      JOIN threadcategories
        ON idthreadcategories = threadpost.category
      JOIN users
        ON idUsers = UserId
      LEFT JOIN (
        SELECT threadsubs.ThreadId as tsubId, COUNT(idThreadSubs) as subs
        FROM threadsubs
        GROUP BY idThreadSubs
      ) as tsubs
        ON tsubs.tsubId = threadpost.idThreadPost
      LEFT JOIN (
        SELECT threadreplies.ThreadId as tId, COUNT(threadreplies.idThreadReplies) as replies
        FROM threadreplies
        GROUP BY threadreplies.ThreadId
      ) AS trep
        ON trep.tId = threadpost.idThreadPost
    WHERE idthreadcategories LIKE ?
    ORDER BY date desc
    LIMIT 20;'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню