【问题标题】:Rails complex query first ascending, then descendingRails 复杂查询先升序,再降序
【发布时间】:2015-09-14 09:08:24
【问题描述】:

所以,我需要进行如下查询:

首先,它将显示日期属性“end_date”大于当前日期且“release_date”属性小于当前日期的元素(例如:今天是 9 月 15 日,end_date 是 20 日和发布时间为 12 日)。这些元素是“活跃的”。

显示这些之后,我想按降序显示过去的元素 - 过去的元素是那些“end_date”低于当前日期的元素。

对于构建此查询的任何帮助,我将不胜感激。谢谢!

附:我正在使用 PostgreSQL、Ruby 2.2.0 和 Rails 4.2.1

【问题讨论】:

  • 您的问题含糊不清。如果您选择带有end_date > current_date 的行,则没有带有end_date < current_date 的元素可供排序。

标签: sql ruby-on-rails ruby database postgresql


【解决方案1】:

其中一个选项是进行两个查询,然后合并 ActiveRecord::Relation 对象。可能效率不高(2 个查询),但易于理解和重构。

@relevant_elements = Element.where('end_date > :current_date AND release_date < :current_date', current_date: Date.today).order('end_date ASC')
@past_elements = Element.where('end_date < :current_date', current_date: Date.today).order('end_date DESC')
@elements = @relevant_elements.merge(@past_elements)

【讨论】:

  • 结果是一个没有元素的数组:(
  • 单独检查每个查询。还提供 schema.rb。也许我们不了解对方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2020-09-20
相关资源
最近更新 更多