我有以下查询,我假设应该返回结果:
SELECT
*
FROM
media
WHERE
sent < package
AND
flag = 0
AND
UNIX_TIMESTAMP(last_run) + 1800 < UNIX_TIMESTAMP(NOW())
ORDER BY
last_run ASC
LIMIT 1
我的数据库中有以下行
`last_run` = '2014-09-13 17:30:0'
`flag` = '0'
`sent` = '4'
`package` = '400'
就目前它2014-09-15 02:53:57
目前time()
1410749659
SELECT UNIX_TIMESTAMP(last_run), UNIX_TIMESTAMP(NOW()), last_run FROM media LIMIT 1
----------------------------------------------------------------------------
UNIX_TIMESTAMP(last_run) UNIX_TIMESTAMP(NOW()) last_run
1410752462 1410750296 2014-09-14 20:41:02
我假设应该返回?如果没有,这背后的原因是什么?
在检查mySQL的时间戳时,我从此查询中获得以下结果
{{1}}
答案 0 :(得分:1)
为什么使用UNIX_TIMESTAMP
。假设last_run
为datetime
,请执行以下操作:
SELECT m.*
FROM media m
WHERE sent < package AND flag = 0 AND
last_run < now() - interval 30 minute
ORDER BY last_run ASC
LIMIT 1;
答案 1 :(得分:1)
问:我认为应该返回此[行]?
A:是的,我们期望返回您描述的行(假设没有隐式数据转换,例如{{1}的数据类型}和sent
列是整数。
使用数据类型为DATETIME的package
列,我们期待这个谓词:
last_run
相当于:
UNIX_TIMESTAMP(last_run) + 1800 < UNIX_TIMESTAMP(NOW())
最可能的解释是表中没有满足所有谓词的行;其他谓词也应该被调查。 (在删除其他谓词的情况下进行测试。)