1

我正在使用一个将日期信息存储为 Unix 时间戳( int(11) )的数据库,我想做的只是返回过去 X 天(例如过去 90 天)的条目。

我想出的是:

SELECT * FROM mytable WHERE category=1 AND 
FROM_UNIXTIME( time ) > DATE_SUB(now(), INTERVAL 91 DAY)

其中“时间”是数据库中的 int(11)。这似乎工作正常,但只是想知道其他人对此有何看法。

4

4 回答 4

2
SELECT * FROM mytable WHERE category=1 AND 
time > (UNIX_TIMESTAMP() - ((60*60*24)*90))

或者干脆

SELECT * FROM mytable WHERE category=1 AND time > (UNIX_TIMESTAMP() - (86400*90))

这只是比较一个数字(在这种情况下是秒)

于 2009-08-23T17:49:12.440 回答
0

只是大声思考......不会反过来导致数据库的工作减少吗?

time > UNIX_TIMESTAMP( DATE_SUB(NOW(), INTERVAL 91 DAY) )
于 2009-08-23T17:49:24.997 回答
0

这个查询肯定会让你头疼,因为 MySQL 需要为每一行进行日期转换,从而无法使用索引。Unix 时间戳是数字,因此不要将时间戳转换为另一种日期格式,而是将查找日期转换为 unix 时间戳。

于 2009-08-23T17:52:03.510 回答
0

将时间戳存储为 int 的原因是什么?我会使用 mysql DATETIME数据类型,因为您可以使用mysql 具有的许多日期时间函数。

如果您无法控制此字段的数据类型,我会在您进行查询之前将您的日期转换为 unix 时间戳 int 并以这种方式进行比较。

于 2009-08-23T17:55:46.543 回答