Nouveaux messages par membre [Résolu]

Signaler
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009
-
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009
-
Bonjour tout le monde :)

Voila ma question.
Sur mon site, j'ai des membres (enregistrés dans une base de donnée).
Chaque membre peux poser un message sur une sorte de livre d'or (messages enregistrés dnas une base de donnée).

Ce que je souhaite, c'est qu'à la connection sur le site, chaque membre puisse voir quel(s) message(s) il n'as pas encore lu...
J'ai d'abord pensé à travailler sur la base de donnée et d'y enregistrer les messages lus par membres ou pas... Mais je ne sais pas comment faire des contraintes d'intégritées sur une base de donnée en MySQL...
Je suis ensuite passé sur le travail des cookies, mais cela le remplirais, cela n'allais pas être propre, et en plus de ça, il suffit que le mmebre se connecte chez quelqu'un d'autre pour ne pas savoir ou il en es dans les messages :(

Donc voila; si vous avez une bonne solution, ou si vous savez comment faire des contraintes d'intégritées avec MySQL, je vous attends impatiement.

Cordialement, Adeliz.

10 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Là t'en as pas besoin avec ce que je t'ai montré.
Sinon :
SELECT U.user_nom, M.sujet FROM users U LEFT JOIN messages M ON M.user_id = U.user_id
En prenant en compte que tu as un user_id dans ta table messages.
Et que tu fais un LEFT JOIN (y en a d'autres...INNER, RIGHT, JOIN tout court...)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Le plus simple serait d'enregistrer la date de dernière visite de ton membre: tout les messages ayant été postés ultérieurement seront marqués comme non-lus!

Ensuite, une fois cette liste récupérée, tu peux éventuellement la mettre dans un cookie (ou variable de session): chaque fois que le membre lit un des messages, ce l'enlève de la liste à lire...

Cette méthode amène un petit pb: si j'ai deux messages ( a et b ) à lire, que je lis a et que je quitte le site, b n'apparaîtra plus comme non lu lors d'une visite ultérieure... C'est pas génial, mais de faire un système qui se rappelle de tout peut demander pas mal d'espace bdd selon le nombre de messages et de membres de ton système... Et bcp de forums (phpBB, ...) fonctionnent comme ceci!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009

Oui, j'y ai pensé, mais bon, plus éfficace cela sera, mieux je me porterais...
Pour ce qui est de la BDD, je ne pense pas que cela soit trop lourd, cela fait juste une table de plus et autant d'entitées que de membres, pas plus... (Pour tel membre, et pour tel message = Oui ou Non).

En tout cas merci quand même :)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Oui, mais si tu fais une entité par msg-membre, tu as une multiplication:
1000 msgs et 50 membres --> 50'000 entrées... Va falloir rassembler un peu, :P

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

je pige pas moi.
Si j'ai une table users avec
user_id et compagnie.
Une table messages
avec mess_id, user_id et compagnie

Et que dans ma table messages j'ai un champ 'mess_lu' qui est à 0 si le mec n'a pas lu, et passe à 1 si le mec lit son message...

Ca devient simple, non ??
SELECT mess_id, mess_sujet FROM messages WHERE user_id $_SESSION['user_id'] AND mess_lu 0

Ca fait pas un gros select.
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009

Oui mais si tu as 200 membres et 3000 messages...
Imagine toi, la base de donnée va exploser !

Je pense que je ne vais pas avoir le choix, je vias faire comme proposé ci dessus...
Sauf que je vais enregistrer la date de derniere visite dnas ma BDD pour que même si le membre passe via un autre PC, on puisse lui dire quels messages sont non lus...

Après il faudra réfléchir au comment ne pas marquer les messages en "lu" si il se deconnecte
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Et puis quoi encore ?
Moi je fais des SELECT récupérant quelques centaines d'entrées en filtrant sur 4-5 champs et avec 3-4 jointures, dans des tables contenant plusieurs dizaines de milliers d'entrées (idem pour les tables de jointure), et c'est immédiat.
Alors je vois mal comment tu pourrais mettre mysql à genou avec 200 membres et 3000 messages, en faisant un select filtré comme celui-ci...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Sans jointure, qui plus est...
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009

Autant pour moi alors
Et comment on fait une jointure alors ?
Messages postés
55
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
24 novembre 2009

je te remerci
Si j'ai un soucis, je reviendrais l'actualiser :D