从MySQL数据库获取最近30分钟的记录,使用Unix时间戳。

3

我想从一个MySQL数据库的表中获取数据,其中我的时间戳是以Unix格式存储的。

我在做了一些研究后使用了以下查询语句,但仍然无法获得结果,它显示为空行。有人能帮忙吗:

 SELECT *
 FROM bs_items
 WHERE  owner_id='3'
 AND timestamp > (now() - interval 30 minute) 

它应该可以工作,不知道问题在哪里:
TABLE: bs_items
==================================================
| log_id |  owner_id   |  item_code  | timestamp |
==================================================
| 1      | 10          | 100         | 12345     |
--------------------------------------------------
| 2      | 12          | 200         | 23456     |
--------------------------------------------------
2个回答

3

已经有一段时间了,但我认为这可能是正确的:

SELECT * FROM bs_items WHERE 
datetime_column < DATE_SUB(NOW(), INTERVAL 30 MINUTE)

您可能还可以通过选择来进行日期时间比较,然后将其放在小于查询中。 select '2012-07-22 13:50:14' + INTERVAL 30 MINUTE

所以猜测是: SELECT * FROM table WHERE datetimecol < (select '2012-07-22 13:50:14' + INTERVAL 30 MINUTE)

尝试运行一个查询,将结果添加30分钟以调试:

select '2012-07-22 13:50:14' + INTERVAL 30 MINUTE

不好意思,它给了我所有的记录,并且时间戳是以Unix格式表示的。 - Sakshi Sharma
另一个想法...我认为FROM_UNIXTIME()可以工作...尝试在unix时间+间隔30分钟上查询以查看结果。 类似这样的选择FROM_UNIXTIME('来自数据库的值')+ INTERVAL 30 MINUTE - Darcey
@Darcey 几乎正确,< 应该是 >,因为 DATE_SUB 函数返回的是 NOW() 减去 30 分钟之前的时间,因此要查看 datetime_column 中最近 30 分钟的数据,就需要选择大于 30 分钟之前的数据。如果您在测试时没有注意到这个差异,只是提醒其他人遇到这个解决方案时要注意。 - Michael Cropper

1

看起来经过长时间的尝试,我找到了一个完美的解决方案。

   $sql=mysql_query("SELECT * FROM bs_items WHERE 
   owner_id='$loguser' AND timestamp > ( UNIX_TIMESTAMP( ) -600)
   order by timestamp desc");

看起来它能给我想要的结果,分享出去或许能帮到别人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接