MySQL - 仅返回过去X天的条目

时间:2009-08-23 17:43:20

标签: mysql date time timestamp intervals

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

我想出的是:

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

其中'time'是db中的int(11)。这似乎工作正常,但只是想知道其他人对此的看法。

4 个答案:

答案 0 :(得分:2)

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

或只是

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

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

答案 1 :(得分:0)

只是大声思考......不会这样做会导致DB工作量减少吗?

time > UNIX_TIMESTAMP( DATE_SUB(NOW(), INTERVAL 91 DAY) )

答案 2 :(得分:0)

此查询必然会让您头疼,因为MySQL需要为每行使用索引进行日期转换。 Unix时间戳是数字,因此不是将时间戳转换为其他日期格式,而是将查找日期转换为unix时间戳。

答案 3 :(得分:0)

将时间戳存储为int的原因是什么?我会使用mysql DATETIME数据类型,因为你可以使用许多Date Time functions mysql。

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