mysql - 如何从 Rails 3 中的 LEFT OUTER JOIN 获取最新记录

标签 mysql ruby-on-rails-3 activerecord left-join

我有两个模型:

用户和帖子(其中用户有_许多帖子)

我需要获取按最近发布帖子的用户排序的用户列表(包括列表顶部没有帖子的用户)。

到目前为止,我成功地做了这样的事情:

@users = User
          .joins("LEFT OUTER JOIN posts ON users.id = posts.user_id")
          .group("users.id")
          .order("posts.created_at ASC")
          .page(params[:page])

即将没有任何帖子的内容放在顶部,但其余的内容不会被排序。我怎样才能做到这一点?

最佳答案

我没有找到使用普通 activerecord 来完成此操作的方法。我的解决方案是:

@users = User.find_by_sql(%q{
                SELECT users.*
                FROM users 
                LEFT OUTER JOIN (
                                  SELECT user_id, MAX(created_at) as max_created_at
                                  FROM posts
                                  GROUP BY user_id
                                ) AS posts_sq
                ON posts_sq.user_id = users.id
                LEFT OUTER JOIN posts AS posts
                  ON posts.user_id = posts_sq.user_id
                 AND posts.created_at = posts_sq.max_created_at
                WHERE deleted = false
                ORDER BY posts.id IS NULL DESC, posts.created_at DESC
                }).paginate(:page => params[:page])

关于mysql - 如何从 Rails 3 中的 LEFT OUTER JOIN 获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152423/

相关文章:

PHP 用户输入未插入数据库

mysql - 存储过程空值

ruby-on-rails - rails 3.1 : Querying Postgres for records within a time range

ruby-on-rails - 你如何让一个对象观察/订阅自己来观察某个领域?

ruby-on-rails - Rails 对象关系和 JSON 渲染

ruby-on-rails - rake 数据库 :migrate error (Migrations are pending)

python - 如何在 MySQL 中匹配列

MySQL 查询不工作

ruby-on-rails-3 - Cancan + Devise,让管理员管理用户的最佳方式

ruby-on-rails - 断言assert_valid_keys的: Unknown key: :order (ArgumentError)