has_manyな関連テーブルのレコードのカラムでソート
チャットとかchat(チャットルーム) has_many chat_messages(チャットのメッセージ)みたいなテーブル構造になると思うが、 この時、チャットルームをメッセージが来た順に並び変えたいとかあると思う。 メッセージの投稿日時がmaxのもので比較してソートする必要があるが、書き方がわからなかったので調べた。
テーブル構造はこんな感じ
chatsテーブル
id | ID |
---|---|
created_at | 作成日時 |
updated_at | 更新日時 |
chat_messagesテーブル
id | ID |
---|---|
chat_id | チャットID |
message | 本文 |
created_at | 作成日時 |
updated_at | 更新日時 |
select chats.*, max_created_at from chats left outer join ( select max(chat_messages.created_at) max_created_at , chat_id from chat_messages group by chat_id ) cm on chats.id = cm.chat_id order by max_created_at desc;