2009-07-27 11 views
0

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é!

+0

Pourquoi inclure la date dans l'instruction select? Pourquoi ne pas juste les derniers «n» messages du fil? –

Répondre

2

On dirait que ce devrait faire ce que vous voulez:

$data = mysql_query(" 
SELECT tblpm.* FROM tblpm 
WHERE date_sent 
IN(
    SELECT MAX(date_sent) 
    FROM tblpm 
    WHERE receiver_id ='$usrID' 
    GROUP BY message_id 
) 
AND receiver_id ='$usrID' 
ORDER BY id DESC") or die(mysql_error()); 
+0

Salut Dennis. C'est très proche de ce que j'essaie d'accomplir. Il affiche maintenant le "fil" à nouveau, et dans la bonne position (en haut). Cependant, la ligne "subject" provient du sujet d'origine (par opposition à "RE: msg") et la date_stamp correspond à l'heure d'origine. Des idées sur l'affichage des lignes les plus récentes? Merci. –

+0

Nevermind Dennis, j'étais stupide. Pardon! –