0

私のMySQLデータベースには、あらゆる人からの会話メッセージを保存するために使用されるこのようなテーブルがあります

id               int(11)           id of the message    
from member_id   int(11)           id of the person the message was sent from
to member_id     int(11)           id of the person the message was sent to 
date sent        datetime          date of when it was sent 
active           tinyint(1)        if the message is deleted    
text             longtext          the text of the message
from_read        tinyint(1)        boolean to know if the person who sent it read it 
to_read          tinyint(1)        boolean to know if the person who it got sent to read it

たとえば、次のようになります。

from_member_id to_member_id date sent
1              2            june 12
1              3            june 13
2              3            june 14
3              1            june 9

そのため、 person121および32およびの間で会話が行われ3ます。

ユーザーが参加しているすべての会話から、現在のユーザーが関与している最新のメッセージを提供するselectステートメントを取得しようとしています。したがって、1ログインしている場合、2行を取得することが期待されます。1' _ 2つの会話です。また、結果セットは送信日で並べ替える必要があるため、新しい会話が一番上に表示されます。

私がやろうとしているのは、会話のリストと各リストの最新のメッセージが表示される Android 携帯のテキストメッセージのようなものです。

これは私のSQLクエリです

SELECT *
FROM (
    SELECT   *
    FROM     message
    WHERE `from member_id`=1 OR `to member_id`=1
    ORDER BY IF(`from member_id`=1, `to member_id`, `from member_id`)
) as t
GROUP BY IF(`from member_id`=1, `to member_id`, `from member_id`)

1今のところ、現在のユーザーになるようにハードコーディングしました。私がやっていることは、if ステートメントを使用して確認できる相手の ID で並べ替え、その結果をグループ化して、各会話から最近のものを取得しようとすることです。

問題は、グループ化するときに、各グループが複数の行を持つことができ、ランダムな行を選択しているように見えることです。最新の送信日の値を持つ行を選択するにはどうすればよいですか?

4

2 に答える 2