データベースに次のテーブルがあります。
sentBy
およびテーブルsentTo
への FKです。User
このテーブルには、ユーザー間のメッセージがあります。
sentBy | sentTo | dateSent | body
-------+----------+------------------+-----------------
1 | 2 | 11/21/2010 10:00 | Hey!
-------+----------+------------------+-----------------
2 | 1 | 11/21/2010 10:50 | Hi!
-------+----------+------------------+-----------------
1 | 2 | 11/21/2010 10:51 | msg body 1
-------+----------+------------------+-----------------
2 | 1 | 11/21/2010 11:05 | msg body 2
-------+----------+------------------+-----------------
1 | 3 | 11/21/2010 11:51 | msg body 3
-------+----------+------------------+-----------------
3 | 1 | 11/21/2010 12:05 | msg body 4
-------+----------+------------------+-----------------
1 | 3 | 11/21/2010 12:16 | msg body 5
-------+----------+------------------+-----------------
4 | 1 | 11/21/2010 12:25 | msg body 6
-------+----------+------------------+-----------------
user 1 が会話したユーザーと、 user 1 と会話したユーザーを知る必要があります。この場合、ユーザー 2、3、および 4 (ユーザー 4 はユーザー 1 にメッセージを送信しましたが、ユーザー 1 はまだメッセージを送信していないことに注意してください)。
2 番目の質問は、各ユーザーとの最後のメッセージを取得するにはどうすればよいかということです。ユーザーに送信された最新のメッセージを取得するよう求めています。
たとえば、ユーザー 1 について尋ねている場合、ユーザー 2 の最新のメッセージはメッセージ本文 2 です。ユーザー 3 の最新のメッセージはメッセージ本文 5 です。
1 つの SQL SELECT ステートメントでその情報を取得するにはどうすればよいですか? または、2つの選択が必要になるかもしれません。
私はWhatsAppのようなことをしようとしています。会話したユーザーのリスト (私の最初の質問) と、彼らとの最後のメッセージ (私の 2 番目の質問) を含むチャット画面があります。
という名前の別のテーブルを作成して、そのテーブルConversation
に移動sentBy
しsentTo
、日付が送信された最後のメッセージを送信することもできますが、これは良い設計ではないと思います。
私の2つの質問の結果は次のとおりです。
sentBy | sentTo | dateSent | body
-------+----------+------------------+-----------------
2 | 1 | 11/21/2010 11:05 | msg body 2
-------+----------+------------------+-----------------
1 | 3 | 11/21/2010 12:16 | msg body 5
-------+----------+------------------+-----------------
4 | 1 | 11/21/2010 12:25 | msg body 6
-------+----------+------------------+-----------------