Une méthode très efficace: crée une table qui contiendra l´id du membre, l´di du sujet et l´id du dernier message lu par ce membre.
De cette façon, tu sauras très facilement si on a lu ou pas un sujet.
Quand tu afficheras la liste des sujets, tu fais une jointure sur cette table (si l´on est connecté) pour récupérer l´id du dernier message lu ou 0 si on a jamais lu le sujet (select coalesce(id_last_msg, 0) as id_last_msg)
Quand tu feras ta boucle pour afficher les sujets, tu n´auras qu´a faire une ou deux conditions:
- si le dernier message lu est 0, c´est non lu
- sinon si le dernier message lu est plus petit que l´id du dernier message posté dans le sujet, c´est non-lu
- sinon c´est lu.
Tu peux aussi mettre quelques trucs en places pour éviter qu´il n´y aies trop de lignes dans cette table (mais si tu n´as que 500 membres, ça sert à rien)