我有一个表(例如说)存储命中数:
id | datetime | ...
-----------------------------------
1 | 2014-05-30 15:19:00 | ...
2 | 2014-06-01 12:14:00 | ...
3 | 2014-06-04 13:06:00 | ...
4 | 2014-06-04 17:26:00 | ...
5 | ... | ...
用户可以生成报告,他们可以选择日期范围。但是,我想让用户能够使用自己的时区首选项。
当前,例如,我使用类似这样的查询来选择今天的列:
... WHERE datetime >= CURDATE()
我怎样才能做到这一点?将日期存储为unixtime更好吗?我已经在Google上阅读了所有结果,但感到困惑。
这个查询将被称为很多,因此性能非常重要
您可以从用户处获得时区首选项作为国家/地区的名称,并使用它来相应地设置时区:
SET time_zone = 'Europe/Helsinki';
要为日期范围创建过滤器,您可以使用常规的where条件,如下所示:
select * from table where hit_date>=startdate and hit_date<enddate
表现:
您可以使用datetime列创建索引,这将大大提高性能。要记住的一件事是,使用经常更新的内容作为索引通常不是一个好主意。
笔记:
假设您将网页点击日期时间存储在您自己的时区(例如亚洲/北京)中,并且用户将其更改为“欧洲/赫尔辛基”,在这种情况下,您应该在执行查询以检索正确的时间之前相应地转换时区结果使用
SELECT CONVERT_TZ('2004-01-01 12:00:00','Asia/Beijing','Europe/Helsinki');
用外行术语来说,因为数据库是根据您的时区填充的,所以您应该在执行用户查询之前找到您所在时区的时间。
用户时区---------->您的时区-------------->查询
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句