Ну, во-первых, вам в конечном итоге придется переосмыслить эту функцию (если только вы не хотите отображать не более 3 ответов). Будет заманчиво сделать это рекурсивно (потому что рекурсия поддается этому типу проблемы), но есть способ сделать это без рекурсии, которая работает так же хорошо. В любом случае, теперь это не так, почему не работает правильно. Ваш код кажется надежным, но вы уверены, что запрос SQL возвращает правильные результаты? Вы пробовали это без PHP, просто выполнив запрос и увидев, что вы получите? Не совсем уверен, требуется ли это ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
SELECT `postID`, `topic`, `subject`, `posterID`,`username`, `id`
FROM `boardposts`, `account`
WHERE `boardposts`.`posterID` = `accounts`.`id` AND `boardposts`.`parentID` = ?
Не могу вспомнить, но вам, возможно, придется использовать и имена таблиц в предложении select (как вы делаете сейчас), хотя я чувствую, что они могут быть необязательными. В любом случае, убедитесь, что ваш запрос сначала возвращает правильные результаты.