вот мой 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. Это связано с тем, что я хочу получить как количество подписки на поток, так и количество ответов.
Однако результат дает мне неправильное количество ответов (такое же количество, что и подписки).
Как правильно сформулировать этот запрос?
догадаться. решение заключается в использовании подзапросов в соединениях, для которых требуется группа:
'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;'