Sulit untuk mengetahuinya tanpa melihat DDL tabel Anda, data sampel yang relevan, dan keluaran yang diinginkan.
Saya mungkin salah mengartikan persyaratan Anda, tetapi coba ini:
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