[eluser]Jelmer[/eluser]
The only way I can think of is to have a table that saves for each user and topic combo when it's last been viewed so you can check for each topic if it's been viewed or not (if not, it's either older then the last post or not in the database).
Code:
id | topic_id | user_id | last_view
But I don't really see any advantage to this, only if you want your users to read every topic. I like the more generally used way better: to save the last login and only show new or updated topics since last login as unread.
Also: such a table would become huge, the only way to keep it useable would probably be to have the system purge all entries with a last_view older than a certain setting (like a month) and consider any topics updated before such a limit as read anyway.