J'ai récemment trouvé un trou dans mon instruction SELECT pour un système de messagerie privé que je développe.Déclaration PHP/MySQL SELECT - Léger problème
est ici la structure de base de ma table:
tblpm:
unique_id thread_id subject content receiver_id sender_id date_sent
La page que je développe est la boîte de réception, où tous les messages les plus récents sont affichés pour un utilisateur.
L'instruction SELECT J'utilise est:
$data = mysql_query("
SELECT tblpm.* FROM tblpm
WHERE date_sent
IN(
SELECT MAX(date_sent)
FROM tblpm
GROUP BY message_id
)
AND receiver_id ='$usrID'
ORDER BY id DESC") or die(mysql_error());
Maintenant, voici ce que je l'ai remarqué: Quand j'envoie un message à l'utilisateur, il envoie bien, et ne se présente pas dans la boîte de réception. (Parce qu'il ne devrait pas, il devrait apparaître dans "articles envoyés"). Ensuite, si un utilisateur devait "répondre" au message (donc, le même fil), il apparaîtrait aussi bien dans la boîte de réception. Cependant, si je réponds à "la réponse" (en d'autres termes, le troisième message dans le fil), il n'apparaît plus dans la boîte de réception, parce que l'instruction SELECT est dirigée pour choisir le MAX (date_sent) d'un thread O WH le receiver_ID = $ usrID. Eh bien, le problème est que le plus récent (date_sent) d'un élément threadé est "reçu" par quelqu'un d'autre, de sorte que l'instruction SELECT n'affiche "aucun" des éléments filetés.
Espérons que cela a du sens.
est ici une représentation visuelle de ce qui se passe:
unique_id thread_id subject receiver_id sender_id date_sent
1 144 Msg 22 33 2009-07-22 //Will display fine in sent items.
2 144 re: Msg 33 22 2009-07-23 //Will display fine in inbox of user (usrID 33).
3 144 RE: re:Msg 22 33 2009-07-24 //Once this message is sent, the entire thread (thread_id 144) no longer displays in the inbox.
Toute aide sur ce serait très apprécié!
Pourquoi inclure la date dans l'instruction select? Pourquoi ne pas juste les derniers «n» messages du fil? –