2011-08-04 48 views
0

即時消息使得這個消息系統和即時通訊有問題。基本上,它是一個線程類型系統,有點像Facebook風格的消息。用戶1向用戶75發送消息(消息1和線索1),並且用戶75回覆消息(消息2在線索1中創建)等等。現在我們能夠完美地顯示一切。讓我們假設用戶75在該線程(消息13), 上提交他的第5個回覆,並且用戶1刪除消息以清理他的收件箱(NOW消息5的值爲「已刪除」)。 .....如果用戶75回覆,那麼該線程中的每個消息都會再次顯示給他。我希望它以某種方式工作,用戶75的回覆將看起來像一個新的線程給用戶1(但它不是,我怎麼能在sql中實現這一點) 這裏是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 ;