我有一个模型Post
,其中包含text
,point
和created_at
列。
要获得包含文字foo
或point
的前3个帖子超过20
。
scope :foo_or_good_point, -> {
where(<<-SQL)
text LIKE '%foo%' OR point >= 20
SQL
}
如果该行不存在,请使用最近的3个帖子。
def self.foo_or_good_point_or_recent
return foo_or_good_point.first(3) if foo_or_good_point.exists?
order(created_at: :desc).first(3)
end
上面的代码运行正常。但是有多个SQL调用。 我可以用单个SQL编写此行为吗?
答案 0 :(得分:0)
我认为可以使用像这样的
这样的SQL查询来解决它select *
from Post
where text LIKE '%foo%' OR point >= 20
union all
select *
from Post
where not exists(select 1 from Post where text LIKE '%foo%' OR point >= 20)
order by created_at desc
limit 3