Можно хранить только то, что он читал и от этого строить выборки.
Для каждого пользователя вы можете хранить в таблице:
- user_id
- topic_id
- time_read
UNIQUE KEY (user_id, topic_id)
Заходит пользователь в топик - сохраняем time_read = time()
А дальше так:
- если записи в таблице нет - значит тема для пользователя новая;
- если время изменения топика больше времени в этой таблице, значит в топике появились новые сообщения;