首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails ActiveRecord如何将NULL设置为Time.now?

Rails ActiveRecord如何将NULL设置为Time.now?
EN

Stack Overflow用户
提问于 2011-10-22 16:07:06
回答 2查看 338关注 0票数 0

我有几张桌子:

代码语言:javascript
复制
online | offline
 10:32 | 11:06
 12:28 | 13:04
 14:07 | NULL

如您所见,- user此时未离线(假设现在是14:15)。我需要获得所有用户在线的持续时间。如果用户当前未离线-我需要获取差异Time.now -在线。

在我的ruby代码中,我创建了函数:

代码语言:javascript
复制
def offline_datetime
  if offline.nil? then Time.current else offline end
end

还好,但是如果我有很多记录的话就会很慢。如何通过数据库操作?

EN

回答 2

Stack Overflow用户

发布于 2011-10-22 16:52:11

即使有数百条记录,你额外拥有的也是每条记录一次额外的nil测试,并且只有一次“time.now”计算。但我只会在必要的时候这样做(如果它没有损坏,就不要调优性能)。

编辑如果您需要多次计算在线次数的总和,则应在存储离线时间戳时预先计算在线时间:

票数 3
EN

Stack Overflow用户

发布于 2011-10-22 17:11:47

我认为在这种情况下,做两个查询将是一个简单的解决方案。一个包含离线为空的数据集,另一个仅获取这些数据集。然后,您可以像这样使用MySQL的CURRENT_TIMESTAMP变量(它总是包含实际时间的时间映射):

代码语言:javascript
复制
Model.where("offline IS NULL").sum("CURRENT_TIMESTAMP-online")

然后您可以添加第一个和第二个查询的结果。也许让方法在其中起作用:

代码语言:javascript
复制
def self.your_method_name_here
     secounds=0
     secounds+=Model.where("offline IS NOT NULL").sum("offline-online").to_i
     secounds+=Model.where("ofline IS NULL").sum("CURRENT_TIMESTAMP-online").to_i
     secounds
end

也许可以在一个查询中做到这一点,但我认为这是可行的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7858208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档