Actually, thinking a bit more, I realize I'm going to need this query in multiple locations, so it does make sense to make it a view. I've updated the code slightly to make it work independent of user (which can then be searched on as mentioned above).
So then maybe I should just do a group on the resulting view, taking the max value of newPosts. However, I'd be open to a more efficient suggestion :-/
SELECT rdf.userID, t.forumID, t.threadID, r.lastPostID, rdt.lastRead, rdf.cLastRead, IF(r.lastPostID > IFNULL(rdt.lastRead, 0) AND r.lastPostID > rdf.cLastRead, 1, 0) newPosts
FROM threads t
INNER JOIN threads_relPosts r USING (threadID)
LEFT JOIN forums_readData_forums_c rdf on t.forumID = rdf.forumID
LEFT JOIN forums_readData_threads rdt ON t.threadID = rdt.threadID AND rdf.userID = rdt.userID