Voici un lien vers un sujet où le même problème a été abordé et où, personnellement, je considère le problème comme réglé :
http://www.commentcamarche.net/forum/affich-9157283-forum-en-php-message-lus-non-lus
Sinon, pour résumer, j'ai appliqué cette version-ci sur mon forum. Ça tourne très bien et sur papier, il y a de très grandes chances que ça tourne bien aussi quand il y a un très grand nombre d'utilisateurs.
Explications :
-> Au niveau des tables :
Il te faut une table "sujets" où tu vas placer les sujets du forum
Il te faut une table "messages" où tu vas placer les messages avec un champ reprenant l'ID du sujet, un champ de type BLOB où tu vas stocker, sous fichier .txt, les ID des utilisateurs ayant vu le message (et tu rajoutes tous les champs nécessaires au message)
-> Le principe :
Le fait d'avoir un champ de type BLOB va permettre de stocker, sous forme de fichier .txt, l'ensemble des ID des utilisateurs ayant vu le message. Ainsi, une personne poste un message et dans ce champ BLOB, son ID sera noté. Ensuite, pour chaque utilisateur passant sur la page où se trouve le message (bref, quand celui-ci s'affiche), le champ BLOB est récupéré et mis à jour en rajoutant les ID des utilisateurs l'ayant vu.
Au final, tout utilisateur n'ayant pas son ID dans le champ de type BLOB en rapport au message verra l'icône "Nouveau message" s'afficher. Sinon, ça voudra dire qu'il l'aura lu.
-> Les avantages :
Le principal défaut qu'on peut reprocher aux forums phpBB, xooit et autres, c'est que lorsqu'on se déconnecte, qu'on efface nos traces bref, qu'on se déconnecte d'une quelconque manière, l'ensemble des messages non-lus passe en lu... Ce qui assez ennuyant. Ici, ce n'est pas le cas, aucune mise à jour n'est effectuée sur les champs de type BLOB et donc, si on part, qu'on change de pc ou je ne sais quoi, les messages non-lus restent non-lus.