两个SQL查询在一个ActiveRecord或SQL中

时间:2013-02-23 19:37:37

标签: sql ruby-on-rails postgresql activerecord sinatra

我目前正在使用ActiveRecord to paginate items

def index
  params[:per_page] ||= 50
  @articles = Article.limit(params[:per_page]).offset(params[:page].to_i * params[:per_page].to_i)
  @articles_count = Article.count
end

......它运作良好。

但是,我想知道是否可以使用ActiveRecord或纯SQL(例如使用postgresql)执行这两个查询。谢谢!

1 个答案:

答案 0 :(得分:1)

您当然可以使用子查询,但这不会提高性能,因为DBMS仍将执行2个单独的查询:

SELECT
  article.*,
 (SELECT COUNT(*) FROM article) AS count
FROM article
LIMIT x
OFFSET y

但是这样你就不能轻易使用ActiveRecord了。

然而,MySQL具有SELECT COUNT(*) FROM article事物的内置函数。但它也会这样做:它只用COUNT(*)执行第二个查询。

您的解决方案正常。