我目前正在使用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)执行这两个查询。谢谢!
答案 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(*)
执行第二个查询。
您的解决方案正常。