Итак, у меня есть небольшой форум, для которого я пытаюсь получить данные, есть 4 таблицы, forum, forum_posts, forum_threads и пользователи. То, что я пытаюсь сделать, - это получить последнее сообщение для каждого форума и дать пользователю краткий обзор этого сообщения. Я хочу также получить количество сообщений и количество тем в каждом форуме. Кроме того, я хочу сделать это в одном запросе. Итак, вот что я придумала:
SELECT lfx_forum_posts.*, lfx_forum.*, COUNT(lfx_forum_posts.pid) as posts_count,
lfx_users.username,
lfx_users.uid,
lfx_forum_threads.tid, lfx_forum_threads.parent_forum as t_parent,
lfx_forum_threads.text as t_text, COUNT(lfx_forum_threads.tid) as thread_count
FROM
lfx_forum
LEFT JOIN
(lfx_forum_threads
INNER JOIN
(lfx_forum_posts
INNER JOIN lfx_users
ON lfx_users.uid = lfx_forum_posts.author)
ON lfx_forum_threads.tid = lfx_forum_posts.parent_thread AND lfx_forum_posts.pid =
(SELECT MAX(lfx_forum_posts.pid)
FROM lfx_forum_posts
WHERE lfx_forum_posts.parent_forum = lfx_forum.fid
GROUP BY lfx_forum_posts.parent_forum)
)
ON lfx_forum.fid = lfx_forum_posts.parent_forum
GROUP BY lfx_forum.fid
ORDER BY lfx_forum.fid ASC
Это получает последнее сообщение на каждом форуме и дает мне краткий обзор, проблема в том, что
lfx_forum_posts.pid =
(SELECT MAX(lfx_forum_posts.pid)
FROM lfx_forum_posts
WHERE lfx_forum_posts.parent_forum = lfx_forum.fid
GROUP BY lfx_forum_posts.parent_forum)
Заставляет мой COUNT (lfx_forum_posts.pid) переходить на один (а также COUNT (lfx_forum_threads.tid), что не так, как я хотел бы, чтобы он работал. Мой вопрос: есть ли какой-нибудь простой способ заставить его показать правильный номер и в то же время получить правильную информацию о сообщении (самое последнее)?
Если что-то неясно, скажите, и я попытаюсь объяснить мою проблему дальше, я впервые публикую что-то здесь.