GAGA Template

XLetter

Messages Lus/Non Lus

Comment faire ?

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Page : 1
vistuo Posté le 03/08/2007 17:02 - #


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

gaga26 Posté le 03/08/2007 17:37 - #



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.

vistuo Posté le 03/08/2007 17:44 - #


Membre
22 messages
16 ans
A quoi correspond nb dans la table forum_lu ?

gaga26 Posté le 03/08/2007 18:51 - #



741 messages
18 ans
c'est le nombre de msg dans le sujet. C'est utile pour faire une redirection direct (savoir la page).

Tibo Posté le 20/03/2008 19:11 - #


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.

gaga26 Posté le 20/03/2008 19:34 - #



741 messages
18 ans
As-tu déjà entendu parler des sous-requêtes. Si non, c'est de ce côté qu'il faut se tourner à mon avis.

Tibo Posté le 20/03/2008 19:36 - #


Membre
22 messages
Si tu parles de trucs du genre
SELECT * FROM machin WHERE truc IN (SELECT truc FROM bidule WHERE plop='Hihi');

Oui je connais. J'vais étudier le truc.

gaga26 Posté le 20/03/2008 20:55 - #



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.

Page : 1

Vous devez être inscrit et connecté pour pouvoir écrire dans les forums

Retour au forum Autre, à la liste des forums, ou au haut de page