Как отсортировать пользователей по последнему посту? - PullRequest
5 голосов
/ 22 мая 2011

У меня есть две модели: User и Post, в которых есть столбец user_id (внешний ключ) и столбец created_at.

Я бы хотел отсортировать пользователей по последним сообщениям. Например, если:

user_id = 1, created 3 posts at: 17/05/2011, 19/05/2011, 21/05/2011
user_id = 2, created 1 post at: 22/05/2011
user_id = 3, created 2 posts at: 18/05/2011, 20/05/2011

результат должен быть:

user_id = 2
user_id = 1
user_id = 3

Как бы вы достигли этого в Rails 3?

Ответы [ 3 ]

2 голосов
/ 22 мая 2011

Не уверен насчет части RoR, но вы ищете группу по утверждению:

select user_id, max(created_at) as created_at
from posts
group by user_id
order by max(created_at) desc
1 голос
/ 22 мая 2011

Если вы хотите отсортировать по последнему сообщению, вы можете полагаться на тот факт, что строка с наибольшим значением id является самой последней:

Post.select(:user_id).group(:user_id).order("MAX(id) DESC")

Таким образом, вы можете использовать существующий индекс первичного ключа для столбца id (и не добавлять новый индекс для столбца created_at).

1 голос
/ 22 мая 2011

Должно быть что-то вроде:

Post.select(:user_id).group(:user_id).order("created_at DESC")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...