这将通过PHP完成。
我基本上想要获得30分钟前插入的行数。
我的表上有一个时间字段,类型为TIMESTAMP,在更新时它设置为CURRENT_TIMESTAMP。
日期以以下格式存储:
2011-05-27 04:29:17
我的查询应该看起来像这样,但我不能这样做
SELECT COUNT(*) FROM mytable WHERE UNIX_TIMESTAMP(time) < '.time().'-1800
其中time()是PHP获取UNIX时间的函数。
基本上应该做的是打印从现在到30分钟前插入的行数,但我似乎无法使其正常工作。
有人可以帮忙吗?
小编辑: 我看到的另一个问题是php的函数time()显示unix时间,即UTC。存储在mysql中的时间可能是GMT,即计算机的时间/时区设置为。
答案 0 :(得分:1)
通过简单地使用:
,您可以轻松地将现在存储的行存储到30 mins
之前
SELECT count(*) FROM mytable WHERE `time` >= DATE_SUB(UTC_TIMESTAMP, INTERVAL 30 minute)
如果您将日期/时间数据存储为UTC_TIMESTAMP
,则UTC_TIMESTAMP()
的使用只是一个示例,如果需要,您可以使用NOW()
,具体取决于您要存储的内容真。
<强> **编辑** 强> 删除了坏指针并修复了示例:)
答案 1 :(得分:0)
您真的需要计算机的时区与UTC不同吗?为什么不把它设置为UTC&amp;拯救自己的困惑?如果这不起作用,只需在mysql上使用dateadd()在检查时将mysql时间戳转换为UTC?
我的建议是编写一个小函数将mysql时间戳转换为PHP时间戳格式&amp;将它加载到mysql中。然后,您需要做的就是在查询中调用tmstamp(time_stamp)而不是time_stamp。您也可以反过来,即将PHP的“30分钟前”时间戳转换为mysql格式并重新运行查询(可能更容易)。
通常它只是一个格式化问题。它不是跨程序标准化的。