mysql - 如何结合SQL查询的where和order

标签 mysql ruby postgresql ruby-on-rails-4

我有一些项目和拨款是通过比赛联系起来的。赠款有一个到期日期。我想按赠款到期日期对项目的匹配项进行排序。

这为我提供了基于到期日期的匹配项:

def self.expires_date_between(from, to)
  Match.where(:grant_id => Grant.where("expires_at  >= ? and expires_at <= ?", from, to))
end

这会显示基于特定日期范围的匹配项。

def current_matches
  range = user.current_period_range
  matches.expires_date_between(range[0], range[1])
end

这非常适合根据特定时间段显示赠款,但赠款不按日期顺序显示 (expires_at)。似乎拨款是按创建日期排序的。如何更改我的查询,以便按到期日期的顺序列出赠款?

我试过:

def self.expires_date_between(from, to)
  Match.where(:grant_id => Grant.where("expires_at  >= ? and expires_at <= ?", from, to).order('expires_at asc'))
end

这不会引发错误,但也不会更改授权的顺序。有什么想法吗?

最佳答案

假设您已经在模型中定义了关联,这应该可行(但尚未经过测试):

Match
  .joins(:grant)
  .merge(Grant.where("expires_at  >= ? and expires_at <= ?", from, to))
  .order('expires_at asc')

关于mysql - 如何结合SQL查询的where和order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162347/

相关文章:

ruby - 动态类型、鸭子类型和参数多态性之间有什么区别?

mysql - brew install mysql 在 mountain lion 上遵循这个 SO 失败

mysql - 在mysql中将时间乘以十进制值?

ruby - 如何在 ruby​​ 1.8.7 中将网页撇号 (’) 转换为 ascii 39

java - 在 PostgreSQL 中存储 OffsetDateTime 时如何禁用到 UTC 的转换

postgresql - 从查询到 c.JSON 非常慢

java - DataException 无法执行查询

mysql - SQL Like 运算符

python - 当 SQL UPDATE SET 不存在时如何捕获

ruby-on-rails - 在 Rails 中是否可以检查重定向或渲染是否已经发出?