我正在使用ruby 1.9.3
ruby-datamapper 和postgresql
. 我有一个充满条目的表,每个条目都有三个属性id
:text
和created_at
。最后一个是Date
对象。
在我的应用程序中,我的SELECT
一些条目是这样的:collection = Entry.all(:text => /SomeRegexp/)
。我现在想知道返回的所有不同的值。我想到了以下两种方法:created_at
DataMapper::Collection
遍历
DataMapper::Collection
并收集所有日期。dates = Array.new Entry.all(:text => /SomeRegexp/).each { |entry| dates.include?(entry.date) ? next : dates = dates << entry.date }
优点:
- 它应该工作
缺点:
- 海量数据速度很慢
- 它应该工作
向数据库询问每天的条目并收集 collection != nil 的日期
dates = Array.new for date in DatabaseStartDate..Date.today Entry.all(:created_at => date, :text => /SomeRegexp/).empty? ? next : dates = dates << date) end
优点:
- 应该比上面的例子更快,尤其是在有大量数据的情况下
缺点:
- 许多数据库查询
- 应该比上面的例子更快,尤其是在有大量数据的情况下
注意:上面的代码是未经测试的伪代码,它应该只是让读者大致了解真实代码应该做什么,所以它不太可能工作。如果您需要更详细的示例,请随时发表评论,我会尝试更好地解释它!
下一条通知:如果您发现伪代码中有错误,请告诉我,这样我可以更快地开始!;)
所以最后我的问题是:我应该更喜欢哪种解决方案,或者我没有想到更好的解决方案?