Если вам нужно только одно значение для каждой темы, вы можете сгруппировать их по темам, и из каждой темы выбрать самый последний пост. Затем вы можете выбрать 10 лучших тем.
Я напишу это на SQL, и вы можете перевести это на PHP:
SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
GROUP BY t.id
HAVING p.posted = MAX(p.posted) ) ids LEFT JOIN topics AS t ON ids.id = t.id) o
LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'