Nouveaux messages par membre

Résolu
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009 - 29 sept. 2006 à 11:07
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009 - 2 oct. 2006 à 11:29
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 sept. 2006 à 15:13
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...)
3
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
29 sept. 2006 à 11:14
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???"
0
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009
29 sept. 2006 à 11:42
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 :)
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
29 sept. 2006 à 12:07
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???"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 sept. 2006 à 12:15
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.
0
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009
29 sept. 2006 à 13:14
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 sept. 2006 à 14:15
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...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 sept. 2006 à 14:16
Sans jointure, qui plus est...
0
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009
29 sept. 2006 à 14:34
Autant pour moi alors
Et comment on fait une jointure alors ?
0
cs_adeliz Messages postés 55 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 24 novembre 2009
2 oct. 2006 à 11:29
je te remerci
Si j'ai un soucis, je reviendrais l'actualiser :D
0
Rejoignez-nous