2011-08-04 8 views
0

このメッセージングシステムを作成していると問題があります。基本的に、そのスレッドタイプのシステムは、Facebookのスタイルのメッセージングのような並べ替え。ユーザ1はユーザ75にメッセージ(メッセージ1とスレッド1)が作成され、ユーザ75がメッセージ(メッセージ2はスレッド1で作成される)に応答し、以下同様に続きます。今私は完全にすべてを表示することができます。CERTAIN情報をSQL(特定の値以下)に表示

そのスレッド(メッセージ13)で5番目の返信を送信し、 を送信し、ユーザ1がメッセージを削除して受信トレイをクリーンアップすると(今のメッセージ5は「削除済み」という値になります) .....ユーザー75が返信すると、そのスレッドのすべてのメッセージが再び彼に表示されます。私はそれが方法で動作するように、ユーザー75の返信は、ユーザー1の新しいスレッドのように見えるだろう(しかし、それは私がSQLでこれを実現することができます) ここにスレッドでメッセージを表示するSQLです

mysql>  SELECT message_id,thread_id,messages.user_id,to_id,messages.subject,messages.body,from_message_status,to_message_status,message_status,new,messages.date FROM messages 
    ->   INNER JOIN users ON users.id = messages.user_id 
    ->   INNER JOIN messages_thread ON messages_thread.id = messages.thread_id 
    ->   WHERE thread_id = 1 
    ->   GROUP BY messages.message_id ORDER BY message_id ASC ; 
+------------+-----------+---------+-------+---------+---------------------------------------------------------------+---------------------+-------------------+----------------+-----+------------+ 
| message_id | thread_id | user_id | to_id | subject | body               | from_message_status | to_message_status | message_status | new | date  | 
+------------+-----------+---------+-------+---------+---------------------------------------------------------------+---------------------+-------------------+----------------+-----+------------+ 
|   1 |   1 |  75 |  1 |   | Wassup man.             | unread    | unread   | deleted  | 0 | 1312493817 | 
|   2 |   1 |  1 | 75 |   | im chilling , and you?          | unread    | unread   | read   | 0 | 1312493867 | 
|   3 |   1 |  75 |  1 |   | Yea same same just posted man trying to find something to do. | unread    | unread   | deleted  | 0 | 1312493895 | 
|   4 |   1 |  75 |  1 |   | what you trying to get into today?       | unread    | unread   | deleted  | 0 | 1312493904 | 
|   5 |   1 |  75 |  1 |   | just play some video games or something. you?     | unread    | unread   | deleted  | 0 | 1312494046 | 
|   6 |   1 |  75 |  1 |   | hello? dude?             | unread    | unread   | read   | 0 | 1312494108 | 
+------------+-----------+---------+-------+---------+---------------------------------------------------------------+---------------------+-------------------+----------------+-----+------------+ 

あなたはmessage_statusの最後の削除を参照してください。私はその下にすべてを表示しようとしています

+0

誰かが複数のユーザーにメッセージを送信する場合は、複数の行を置くつもりですか?そうなら、正規化されていないデータがあります。 – psr

答えて

2
SELECT ... FROM messages 
      INNER JOIN users ON users.id = messages.user_id 
      INNER JOIN messages_thread ON messages_thread.id = messages.thread_id 
      WHERE thread_id = 1 
      AND message_id > 
       (SELECT max(message_id) FROM messages 
        WHERE thread_id = 1 and message_status = 'DELETED') 
      GROUP BY messages.message_id ORDER BY message_id ASC ; 
関連する問題