我有以下查询,我假设应该返回结果:
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
I假设这应该被退回?如果不是,这背后的原因是什么?
根据 mySQL 检查时间戳时,我从此查询中得到以下结果
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
最佳答案
问:我认为应该返回此[行]?
答:是的,我们希望返回您所描述的行(假设没有进行隐式数据转换,例如发送
的数据类型和package
列是整数。
对于数据类型 DATETIME 的 last_run
列,我们期望此谓词:
UNIX_TIMESTAMP(last_run) + 1800 < UNIX_TIMESTAMP(NOW())
相当于:
last_run < NOW() - INTERVAL 1800 SECOND
<小时/>
最可能的解释是表中没有行满足所有谓词;还应该调查其他谓词。 (删除其他谓词进行测试。)
关于使用 UNIX_TIMESTAMP 的 mySQL 查询返回 0 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840222/