0

threadsしたがって、メッセージとを処理するための2つのテーブルがありますmessages

messages:
id | thread | user_from | user_to | text | created

threads:
id | user_from | user_to | created | status

次のスレッドを取得するクエリを作成したいと思います。

  1. そのスレッドの最新メッセージ
  2. そのスレッドのID

これまで、私は最初にすべてのスレッドをフェッチし(もちろん適切な制限付きで)、次に各スレッドの最新のメッセージを個別に取得することでこの問題に対処してきました。

何かご意見は?

アップデート:

テーブルの関係:messagesthread= threadsid

4

3 に答える 3

1

これを試してください

SELECT  a.id     AS ThreadID, 
        c.`text` AS LatestMessage
FROM    threads a 
            INNER JOIN
            (
                SELECT  thread, max(created) maxCreated
                FROM    messages
                GROUP BY thread
            ) b on a.id = b.thread 
            INNER JOIN messages c
                    on a.id = c.thread AND
                       b.maxCreated = c.created
于 2012-08-16T16:03:02.247 に答える
1
select t.id, max(m.id) as last_message_id
from threads t
left outer join messages m on m.thread = t.id
group by t.id
于 2012-08-16T15:55:43.590 に答える
1

私の頭の上から:

SELECT t.id, m.* FROM threads t
INNER JOIN messages m ON m.thread = t.id
WHERE m.id = 
   (SELECT id FROM messages WHERE thread = t.id ORDER BY id DESC LIMIT 1);

[編集] テスト済みで、問題なく動作するようです。

于 2012-08-16T15:58:59.410 に答える