会話にはメッセージが含まれ、1つのメッセージを2人以上のユーザーに送信できます。
目標は、各会話のユーザーごとの最後のメッセージを取得することです。これにより、各会話のメッセージが最新になります。
また、message_user.time
ユーザーがメッセージを読んだときもあるので、0に等しい場合は、メッセージがまだ読まれていないことを意味します。したがって、最初の順序がmessage_userであり、時間が0であり、メッセージである場合はさらに良いでしょう。 .timeが最大の数値です。
私はそれらのテーブルを手に入れました
メッセージユーザー
user message time
-----|------------|-------
7 | 1 | 0
8 | 1 | 0
7 | 2 | 300
8 | 2 | 300
7 | 3 | 400
メッセージ
id text conversation time
---|-------------|--------------|----------
1 | blah blah1 | 1 | 200
2 | blah blah2 | 1 | 300
3 | blah blah3 | 2 | 400
4 | blah blah4 | 2 | 500
目標は、メッセージを会話ごとにグループ化し、タイムスタンプが大きい最後のmessage_userをその会話にリンクすることです。
私が試したのはこれですが、最後のメッセージが表示されません(順序が間違っています)
SELECT m.user, mu.message, mu.time, mu.id, m.text, m.time as message_time, m.conversation
FROM message_user as mu,message as m
WHERE mu.message=m.id AND mu.user=8
GROUP BY m.conversation
ORDER BY m.time DESC';
次のステップは次のようになります: それが可能かどうかはわかりませんが、最初に時間が0に等しいmessage_userを最初に出力し、次に2番目の順序がmessage.timeである場合(それが可能かどうかさえわかりません)完璧な1つのリクエストで可能です!)
ユーザー8の場合、出力は次のようになります。
text conversation
-----------|------------
blah blah1 | 1 //because message_user.time = 0 (means message is unread)
blah blah3 | 2 //because message.time is the highest in the conversation
ありがとうございました !