我有一个名为submit_timestamp
的列,其中包含UNIX_TIMESTAMP(
),我现在要做的是执行SELECT
查询,并在WHERE
子句中确保{ {1}}等于或在X天内。
(仅限演示目的):
submit_timestamp
所有帮助表示赞赏。
感谢。
答案 0 :(得分:2)
在构造查询之前,计算要在应用程序中进行两次比较的次数。所有编程语言都有一个函数来为您提供当前时间戳(即PHP中的time()
)。要获得“从现在起X天”,请在时间戳中添加60 * 60 * 24 * X秒。
SELECT id
FROM submissions
WHERE submit_timestamp >= $THE_CURRENT_TIMESTAMP
AND submit_timestamp <= ($THE_CURRENT_TIMESTAMP + 60*60*24*X)
AND id = 2
现在你只是比较整数。与Johan的解决方案不同,MySQL将能够使用列上的索引进行比较。
答案 1 :(得分:1)
SELECT id
FROM submissions
WHERE FROM_UNIXTIME(submit_timestamp)
BETWEEN NOW() AND DATE_ADD(NOW(),INTERVAL 2 DAY)
AND id = 2;
A BETWEEN B AND C
A >= B AND A <= C
它只是更好地传达意图:-)
请参阅:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime
修改强> 甚至更好:
SELECT id
FROM submissions
WHERE submit_timestamp BETWEEN UNIXTIMESTAMP()
AND unixtimestamp(DATE_ADD(NOW(),INTERVAL 2 DAY))
AND id = 2;
正如Dan正确解释的那样,这允许MySQL使用submit_timestamp
上的索引,上面的代码没有。
请注意,没有参数的UNIXTIMESTAMP()
会返回UNIXTIMESTAMP(NOW())
请参阅:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp