
Membre
22 messages
16 ans |
Bijour bijour !
Voila c'est une question pour gaga !
Je suis en train de créer un forum avec ton moteur (c'est rapide et cool), mais voila je voudrais savoir comment fais tu pour savoir quand un message et lu ou non-lu, utilise tu des sessions, enregistre tu cela dans une BDD, ou dans des cookies enfin livre nous tes secrets si cela ne te gène pas !
Merci beaucoup d'avance de ta part !
PS:je ne veux pas utiliser la facon du timestamp(je trouve cela faux):voir tuto sur le SDZ
|


741 messages
18 ans |
C'est simple, dans la table sujet tu as certainement un id qui correspond au dernier message posté sur ce sujet (on va le nommer dernier).
Ensuite j'ai une table forum_lu :
CREATE TABLE forum_lu (
id int(11) NOT NULL AUTO_INCREMENT, --pas obligatoire
auteur_id int(11) NOT NULL DEFAULT '0',
sujet_id int(11) NOT NULL DEFAULT '0',
dernier_id int(11) NOT NULL DEFAULT '0',
nb int(11) NOT NULL DEFAULT '0', --utile pour créer un lien direct
PRIMARY KEY (id)
);
D'office les sujets sont non-lu (logique). Quand un membre lit un sujet, on insert (ou modifie si il l'avait déjà lu auparavant) une entrée avec l'id du membre (auteur_id), l'id du sujet (sujet_id) et l'id du dernier message du sujet, donc le dernier message lu (dernier_id).
Ensuite sur l'index du forum on a la requête suivante.
SELECT s.id, s.titre, s.sous_titre, s.auteur_id, s.etat, s.nb_rep, s.nb_lu, m.pseudo AS s_pseudo, lu.dernier_id AS dernier_lu, lu.nb, s.dernier, DATE_FORMAT(d.auteur_date, "%d/%m/%Y %H:%i") d_date, md.id AS d_id, md.pseudo AS d_pseudo, UNIX_TIMESTAMP(d.auteur_date) AS s_date
FROM forum_sujet AS s
LEFT JOIN membres AS m ON s.auteur_id = m.id
LEFT JOIN forum_message AS d ON s.dernier = d.id
LEFT JOIN membres AS md ON d.auteur_id = md.id
LEFT JOIN forum_lu AS lu ON s.id = lu.sujet_id AND lu.auteur_id='.$sess_id.' --ici
WHERE s.id_forum='.$id.' AND s.etat&2
ORDER BY d.auteur_date DESC
On sélectionne le dernier message lu. Si dernier_lu n'existe pas ou qu'il n'est pas le même que dernier, le sujet est non-lu.
Voilà j'espère que ça pourra t'aider.
|

Membre
22 messages
|
Salut,
Désolé de faire remonter ce topic, mais plutôt que d'en créer un autre, je pense qu'il est préférable de continuer celui-là.
Perso. j'ai fait la même chose côté BDD, ainsi que du côté de "savoir si il est lu ou pas" quand on visualise un sujet. Par contre, c'est une autre paire de manches quand il s'agit d'afficher si il y a des messages non lus pour un forum entier.
Alors au début j'avais fait un truc du genre "je regarde tous les sujets pour voir si il y en a un de non lu" mais j'ai trouvé ca assez lourd.
Après j'ai réfléchi à une alternative, qui doit pas être beaucoup mieux et qui est "je compte le nombre de message non lus par forum". Pas trop lourd me direz-vous, sauf quand on selectionne un champs en plus d'utiliser la fonction d'agrégat "COUNT" (oui, car un forum qui a zéro message non lu n'est pas visible dans la requete, ce qui pose des problèmes).
Alors, je voudrai savoir si, par hasard, vous avez des meilleures sollutions ?
Merci.
Au revoir.
|


741 messages
18 ans |
Je ne connais pas cette technique, mais c'est peut-être pareil. Mois je parlais des vues plus précisément, je me suis mal exprimé.
SELECT * FROM
(SELECT nom, prenom FROM membres LIMIT 10)
WHERE age>18
Il est aussi possible de créer physiquement, regarde dans phpmyadmin par exemple.
|