我有几张桌子:
online | offline
10:32 | 11:06
12:28 | 13:04
14:07 | NULL如您所见,- user此时未离线(假设现在是14:15)。我需要获得所有用户在线的持续时间。如果用户当前未离线-我需要获取差异Time.now -在线。
在我的ruby代码中,我创建了函数:
def offline_datetime
if offline.nil? then Time.current else offline end
end还好,但是如果我有很多记录的话就会很慢。如何通过数据库操作?
发布于 2011-10-22 16:52:11
即使有数百条记录,你额外拥有的也是每条记录一次额外的nil测试,并且只有一次“time.now”计算。但我只会在必要的时候这样做(如果它没有损坏,就不要调优性能)。
编辑如果您需要多次计算在线次数的总和,则应在存储离线时间戳时预先计算在线时间:
发布于 2011-10-22 17:11:47
我认为在这种情况下,做两个查询将是一个简单的解决方案。一个包含离线为空的数据集,另一个仅获取这些数据集。然后,您可以像这样使用MySQL的CURRENT_TIMESTAMP变量(它总是包含实际时间的时间映射):
Model.where("offline IS NULL").sum("CURRENT_TIMESTAMP-online")然后您可以添加第一个和第二个查询的结果。也许让方法在其中起作用:
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也许可以在一个查询中做到这一点,但我认为这是可行的!
https://stackoverflow.com/questions/7858208
复制相似问题