Почитал, подумал... Обсуждать, конечно, это вопрос можно долго и упорно. Можно предлагать кучу решений/костылей. Но не кажется ли Вам, уважаемые, что проще сделать как-то примерно так
Избавиться вообще от такого пережитка, как непрочитанное
Вместо непрочитанного - выводить юзеру ссылку на последние ответы в топиках и линк на ответы со времени его последнего прочтения (где-то тут уже подобное было упомянуто)
Добавить в табличку users поле с последним прочтением топиков юзером и от него потом плясать.
И не надо думать, как выводить непрочитанное.
Если пользователь хочет посмотреть активные темы - то ему в последние обновленные (вообще все, за определенный период, например, с возможностью выбора периода).
Если то, что он еще не видел - выводим те топики, которые обновлялись после "отметки о прочтении".
Сбросить непрочитанное таким образом можно элементарно - просто обновить юзеру поле "last read" - по ссылке.
Может написано не совсем грамотно, может немного сумбурно, но смысл, я думаю, понятен.