在日期范围栏中的给定日期迭代项目

时间:2013-01-21 19:08:59

标签: ruby ruby-on-rails-3

我之前有过这样的感觉,但我一直在寻找,但无法明确说明。

我有一个rails应用程序,用于保存特定日期(如生日)的项目。现在我想创建一个视图,创建一个表(或者其他东西,div也可以),它一次声明一个指定的日期,然后逐个遍历相关的项目。

项目有一个日期字段,当然与单独的表格中的日期无关。

我当然可以查询数据库大约30次(因为我想要一个月价值的项目的代表),但我认为它看起来很丑,并且会大量重复。我希望结果看起来像这样(考虑它是暂时有两列的表):

Jan/1 | jan1.item1.desc
      | jan1.item2.desc
      | jan1.item3.desc
Jan/2 | jan2.item1.desc
      | etc.

所以我认为我需要知道两件事:如何构建正确的查询(但这可能就像Item.where("date > ? < ?", lower_bound, upper_bound))一样简单,以及如何将其转换为视图。

我还考虑过每个日子都有一个键的哈希值和一个值的数组,但是我必须像上面那样(重复)构造它,我希望它不是很优雅。

使用GROUP BY似乎并没有让我与其他查询有任何不同(当然,除了项目的分组)。只是一个对象数组,但我可能做错了。

对不起,如果这是一个基本问题。我相对较新的领域(以及一般的编程)。

1 个答案:

答案 0 :(得分:1)

如果您正在制作日历,则可能需要GROUP BY日期:

SELECT COUNT(*) AS instances, DATE(`date`) AS on_date FROM items GROUP BY DATE(`date`)

这假设你的列实际上被称为date,它看起来像是一个SQL保留字,可能是一个坏主意。如果是这样的话,你需要逃避它,如果是这样的话,在MySQL表示法中使用```。 Postgres和其他人使用不同的方法。

对于范围内的实例,您想要的可能是BETWEEN运算符:

@items = Item.where("`date` BETWEEN ? AND ?", lower_bound, upper_bound)