3

会話にはメッセージが含まれ、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

ありがとうございました !

4

1 に答える 1