Rails不同的用户记录,按时间排序

时间:2016-05-19 00:01:28

标签: ruby-on-rails postgresql

所以我有一个查询来获取我关注的每个用户的最新帖子。像这样:

query = Post.select("DISTINCT ON (user_id) *")
      .includes(:likes).includes(:comments)
      .where(user_id: followings)
      .where(silently_deleted: false)
      .order(user_id: :desc, created_at: :desc)

问题是帖子不按日期排序。我真的不能sort_by,因为我们正在分页。

有没有办法按created_at订购,同时还要保留唯一性?

3 个答案:

答案 0 :(得分:0)

试试这个:

query = Post.select("DISTINCT ON (user_id) *")
  .includes(:likes).includes(:comments)
  .where(user_id: followings)
  .where(silently_deleted: false)
  .order(user_id: :desc)
  .order("posts.created_at DESC")

您需要显式添加表名,因为likes和comments表的列名称为created_at

答案 1 :(得分:0)

您可以使用自我加入为每个用户选择上一篇文章。

对于每个帖子,此LEFT加入同一用户的所有帖子,这些帖子稍后创建(具有比当前帖子更高的awk -F ' ' '{p=0} $5 ~ /MyClassName/ {p=1} p {print $5}' myLogFile.log )。然后,以下id条件仅选择那些稍后没有发布的记录,即有效地为每个用户选择最后一个帖子。

有关其他可能的解决方案,请参阅this blog帖子。最佳解决方案在很大程度上取决于帖子表的大小。

where

答案 2 :(得分:0)

使用group +:

-linkpkg