SPDCA:

Being fresh in my mind, I'm researching how other boards do this.

phpBB: These guys cheat a little bit. They store the following:
- Whether you've marked a sub-forum as read, and the last time you "read" it, or marked it as "read."
- Whether you've marked a thread as read, and the last time you "read" it, or marked it "read."

They never store whether you've read a given post, as default thread display is every single post that is part of a thread (and never an individual post). This means that if you read the first page of a thread, it doesn't matter of you haven't read the subsequent or even the last page of that thread, it will be marked as thread, and you'll never know whether a new post in the thread is something you've actually read, only something that was posted since you were on one of the many pages of a thread.

They get by on the fact that there will always be more replies than there will be threads, which works in most cases, I suppose.

Simple Machines Forum (SMF): A little more sophisticated, but they somewhat suffer from the same problem. They store:

- Whether you've "read" a board, and the ID of the latest post you read (in that board).
- Whether you've "read" a sub-forum, and the ID of the latest post you read (in that sub-forum).
- Whether you've "read" a thread, and the ID of the latest post you read in that thread (in that thread).
- Whether you've "read" a post.

They do specify each message you read, as well as the the ID of the last message at each level. This is as efficient as the phpBB method, as all you have to do is find a ID later or a date newer than the one stored for a particular user.

Supposedly, when a user reads all of a thread, or a sub-forum, it marks the next level up as "read." However, if people read 99/100 posts in a thread, it will never remove the "per message" history and replace it with the "thread" history, or the level above. This means that while occasionally a user will read everything, or mark something explicitly as read, the system eventually balloons its storage. People have come up with solutions for it (marking everything as read for inactive users (www.simplemachines.org)), but they aren't perfect, and end up tampering with people's viewing history.

I can't find much of anything on vBulletin (probably because it's proprietary). MyBB (the codebase that The Lollerdome is built from) does per forum and per thread marking, storing the latest date (the phpBB method).

I might have done something novel here. Or, there's a reason why I shouldn't be doing this that everybody else already figured out.

#902, posted at 2010-10-01 20:41:43 in idkfa