Bonjour,

Je cherche actuellement à mettre en place un système de notifications.
Mon objectif est donc de récupérer le dernier message du sujet lorsque le membre en session a participé.

J'ai donc mis en place un système binaire. Lorsque quelqu'un a posté après le membre en session, le membre en session a pour notification '1' sinon '0'.

table:
id----pseudo-----sujet------datemessage---notification
1-------Paul-----------A-------------01/02/15----------0
2-------Loic-----------A-------------02/02/15-----------0
3------Arthur--------A------------03/02/15------------0
4----'session'--------B------------02/02/15------------1
5-----Michel----------B-----------03/02/15------------0

Avec l'exemple-ci dessus, le membre 'session' a posté dans le sujet B, je cherche donc à récupérer les données de ce membre qui a posté par la suite (pseudo(X) et sujet(Y) : X a posté dans le sujet Y).
Ici il s'agit de Michel.

Mais je ne sais pas vraiment comment m'y prendre.
Je pense devoir utiliser une jointure : je récupère le dernier message uniquement si le membre en session a pour notification '1' pour ce même sujet.
J'ai fait une tentative avec 'distinct' pour réunir les sujets ensemble, j'ai tenté d'utiliser 'max' pour obtenir la date la plus ancienne et tout cela dans une boucle. Mais cela ne me retourne qu'une ligne. Je ne parviens pas à spécifier à ma requête 'uniquement quand le membre en session a posté et a pour notification "1"'

Quelqu'un aurait quelques idées pour me dépanner ?
Merci :)

3 réponses


Il faudrait peut-être que tu considères à ajouter un champs qui spécifie l'id du dernier message ou du moins un champs qui fait référence à un index dans ta table sujet ou message...

De là, ta jointure elle sera en liaison avec l'id spécifié et il faut faire un "order DESC limit 1 " avec un simple fetch... ou fetchall si tu veux toujours les notifications.

Après ton explication est pas vraiment clair, tu parles de session à n'en plus finir et tu nommes un user session... Y'a de quoi noyer un poisson dans l'eau ;)

Merci pour cette réponse. Je ne l'ai pas spécifié mais j'ai un id aussi dans ma table.
Par membre en session, j'entends l'utilisateur connecté au forum qui recevra une alert lorsque quelqu'un aura posté après lui.
Je vais déjà essayer de composer sur bases de ces quelques lignes.
Je reviendrai probablement par la suite x)

En parcourant la doc et en réfléchissant un peu, je me suis dit qu'essayer avec 'EXISTS' il y avait peut-être moyen.

<?php
$bdd = new PDO ('mysql:host=localhost;dbname=blabla', 'root', '');
$req = $bdd->prepare('SELECT MAX(id) AS id FROM forummessages WHERE EXISTS (SELECT * FROM forummessages WHERE pseudo= :pseudo AND notification=\'1\')');
$array = array ('pseudo' => $_SESSION['pseudo']);
$req->execute($array);
foreach($req AS $notification):
echo $notification['id'];
endforeach;
?>

Mais je pense que ma sous-requête est incomplète.
Je ne sais pas si je suis dans le bon ?