Thật khó để biết nếu không nhìn thấy DDL của các bảng của bạn, dữ liệu mẫu liên quan và kết quả đầu ra mong muốn.
Tôi có thể đã làm sai yêu cầu của bạn, nhưng hãy thử điều này:
SELECT *
FROM forum_cat c LEFT JOIN
(SELECT t.cat_id,
p.topic_id,
t.title,
p.id,
p.body,
MAX(p.`date`) AS `date`,
p.author_id,
u.username
FROM forum_post p INNER JOIN
forum_topic t ON t.id = p.topic_id INNER JOIN
`user` u ON u.user_id = p.author_id
GROUP BY t.cat_id) d ON d.cat_id = c.id
WHERE c.main_cat = 1
ORDER BY c.list_no