私は最近私が開発しているプライベートメッセージングシステムのSELECTステートメントに穴を発見しました。PHP/MySQL SELECTステートメント - 軽微な問題
はここに私のテーブルの基本的な構造です:
tblpm:
unique_id thread_id subject content receiver_id sender_id date_sent
私が開発していますページには、すべての最新のメッセージがユーザに表示されている受信トレイ、です。
私が使用しているSELECT文は次のとおりです。私は最初のユーザーにメッセージを送信すると、それが正常に送信され、受信トレイに表示されない:
今$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());
、ここで私が気づいたものです。 (そうしてはならないので、「送信アイテム」に表示されるはずです)。その後、ユーザーがメッセージ(つまり同じスレッド)に「返信」する場合は、受信トレイにも表示されます。
しかし、SELECT文がMAX(date_sent)を選択するように指定されているため、返信(スレッドの3番目のメッセージ)に返信すると、受信トレイには表示されなくなります。どこのreceiver_ID = $ usrIDスレッドの。問題は、スレッド化されたアイテムの最新の(date_sent)が他の誰かによって "受信"されているためです。その結果、SELECTステートメントはスレッド化アイテムの「any」を表示しません。
これはうまくいけばうまくいきます。ここで
は何が起こっているかを視覚的に表現だ:
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.
この上の任意のヘルプははるかに高く評価されるだろう!
はなぜSELECT文の日付が含まれていますか?なぜスレッドの最後の 'n'メッセージではないのですか? –