mysql - 按存在于 created_at 之前的关联排序

标签 mysql ruby-on-rails activerecord

假设我有以下内容:

class Movie < ActiveRecord::Base
  has_many :reviews
end

我想列出用户在评论之前没有先评论的新创建的电影。

所以这就像合并这两个查询:

@reviewed_movies   = Movie.joins(:reviews)
                          .where("reviews.user_id != ?", user.id)
                          .order("created_at DESC")

@unreviewed_movies = Movie.joins(:reviews)
                          .where("reviews.user_id = ?", user.id)
                          .order("created_at DESC")

@movies   = @reviewed_movies.all + @unreviewed_movies.all

有人知道如何在一个查询中执行此操作吗?

最佳答案

不熟悉 Ruby 语法,但您可以执行所有查询,如下所示,假设用户 ID 为“3”

(SELECT * FROM `movies` m  LEFT JOIN  reviews r ON (m.id =r.movie_id)
WHERE user_id =3 ORDER BY created_at DESC)
UNION ALL
(SELECT * FROM `movies` 
LEFT JOIN  reviews r ON (m.id =r.movie_id)
WHERE user_id !=3 ORDER BY created_at DESC)

或者直接根据用户条件加入你的表

(SELECT * FROM `movies` m  
LEFT JOIN  reviews r ON (m.id =r.movie_id AND user_id =3)
ORDER BY created_at DESC)
UNION ALL
(SELECT * FROM `movies` 
LEFT JOIN  reviews r ON (m.id =r.movie_id AND user_id !=3 )
ORDER BY created_at DESC)

Mysql Union

Using union and order by clause in mysql

Rails 3 ActiveRecord: UNION

Union of 2 active record relation object in rails 3

关于mysql - 按存在于 created_at 之前的关联排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772036/

相关文章:

mysql - Ruby on Rails 表名 : what's permitted?

MySQL : convert fractonal years to DATETIME

ruby-on-rails - 每个数组对象的 RoR 范围

ruby-on-rails - 为什么我得到 “Uncaught SyntaxError: Unexpected token ILLEGAL”?

ruby-on-rails - FactoryGirl has_many 与双向存在验证的关联创建额外记录

ruby-on-rails - 如何在不使用任何 yaml 文件的情况下建立第二个数据库连接?

mysql - 如何更改mysql表列的日期格式

mysql - 销售系统数据库设计

php - 如何链接两台不同机器上的两个mysql数据库?

ruby-on-rails - OS X 10.8 上 Rails 应用程序中的段错误