扶手:排序按两列的总和 [英] Rails: Order by sum of two columns

查看:121
本文介绍了扶手:排序按两列的总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有一个图片模式,可以在 full_size 下载和 presentation_size 。当用户下载的照片我跟踪这个照片的 full_downloads presentation_downloads 属性。

So, I have a Photo model which can be downloaded at full_size and presentation_size. When a user downloads a photo I track this on the photo's full_downloads and presentation_downloads attribute.

这一切都很好。

有时候我想知道有多少总下载量已经出现了。我有一个简单的方法, total_downloads 它看起来像这样:

Sometimes I want to know how many total downloads there have been. I have a simple method, total_downloads which looks like so:

def total_downloads
  self.full_downloads + self.presentation_downloads
end

我的问题是:我希望能够通过这三个(全,presentation,总下载量)的订购照片。前两个是容易的,但你如何通过两列的和做的命令?请注意,这需要在两个的SQLite和PG最低兼容。

My question is: I would like to be able to order photos by all three of these (full, presentation, total downloads). The first two are easy, but how do you do an order by the sum of two columns? Note this needs to be both SQLite and PG compatible at minimum.

A面的问题,会是更快,使 total_downloads 的查询方法,如果有什么写的,最好的方法是什么?我所知道的总结上,你可以调用 Photo.sum(...)的类,但我不知道该怎么做了两列上的一个记录。

A side question, would it be faster to make the total_downloads method a query, and if so what's the best way to write that? I know to sum on the class you can call Photo.sum(...), but I'm not sure how to do that for two columns on a single record.

谢谢!

推荐答案

您可以试试这个:

Photo.order('full_downloads + presentation_downloads')

这将运行该SQL查询:

It will run this SQL query:

SELECT "photos".* FROM "photos" ORDER BY full_downloads + presentation_downloads

这可能是缓慢的,但。如果你有一个大的数据集,并使用这种排序顺序的时候,你应该考虑创建一个 total_downloads 列,并重新计算其价值,如果记录的 full_downloads presentation_downloads 列的变化。

This is potentially slow though. If you have a large dataset and use this sort order often, you should consider creating a total_downloads column and recalculating its value if the record's full_downloads or presentation_downloads column changes.

这篇关于扶手:排序按两列的总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆