我正在使用一个将日期信息存储为 Unix 时间戳( int(11) )的数据库,我想做的只是返回过去 X 天(例如过去 90 天)的条目。
我想出的是:
SELECT * FROM mytable WHERE category=1 AND
FROM_UNIXTIME( time ) > DATE_SUB(now(), INTERVAL 91 DAY)
其中“时间”是数据库中的 int(11)。这似乎工作正常,但只是想知道其他人对此有何看法。
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))
这只是比较一个数字(在这种情况下是秒)
只是大声思考......不会反过来导致数据库的工作减少吗?
time > UNIX_TIMESTAMP( DATE_SUB(NOW(), INTERVAL 91 DAY) )
这个查询肯定会让你头疼,因为 MySQL 需要为每一行进行日期转换,从而无法使用索引。Unix 时间戳是数字,因此不要将时间戳转换为另一种日期格式,而是将查找日期转换为 unix 时间戳。