2009-09-17 55 views
0

我正在写一点PHP,但我是一个严肃的人。PHP通过MySQL返回结果基于timeStamp和当前时间

我想当前时间(现在的时间),在表中的时间戳,存储像1085225495.

比较如果时间戳在1小时前的,然后做:

UPDATE TABLE SET visible=0; 

否则忽略。

任何想法在PHP?

回答

1

什么是这样的:

update your_table 
set visible = 0 
where your_timestamp_field >= UNIX_TIMESTAMP(subdate(now(), interval 1 hour)) 


作为解释,这里有一个选择,可以帮助你:

mysql> select now(), subdate(now(), interval 1 hour), UNIX_TIMESTAMP(subdate(now(), interval 1 hour))\G 
*************************** 1. row *************************** 
              now(): 2009-09-17 18:58:31 
       subdate(now(), interval 1 hour): 2009-09-17 17:58:31 
UNIX_TIMESTAMP(subdate(now(), interval 1 hour)): 1253203111 
1 row in set (0.00 sec) 

这里:

  • NOW()获取当前日期和时间
  • subdate()上给前1小时,现在
  • unix_timestamp()转换,为Unix时间戳


你也可以做3600秒的减法UNIX_TIMESTAMP(now()),而是采用SUBDATE ...但我喜欢SUBDATE来电:我觉得它更容易立刻知道你是想1小时(而不是一个神奇的数字像3600)

+0

我如何使用PHP代码作为代码? – CLiown 2009-09-17 17:05:16

+0

您可以像使用mysql_query(或mysqli或PDO等价物)一样使用该查询,就像您现在正在做的一样 - 唯一的一点是您不需要在PHP端进行任何计算:所有操作都是由一个查询。 – 2009-09-17 17:08:44

0

这里有一个办法做到这一点完全的MySQL

UPDATE foo SET visible=0 
WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(timestamp))<3600; 

UNIX_TIMESTAMP()给你的秒数从新纪元,并从当前秒减去时间戳秒让你在几秒钟的年龄。

0
UPDATE TABLE SET visible = 0 WHERE myTimestamp >= UNIX_TIMESTAMP(CURTIME()) - 3600 
+0

$ myQueryUpdate = “UPDATE mdl_course SET visible = 0 WHERE myTimestamp> = CURTIME() - 3600 AND metacourse = 0”; 为什么不能正常工作? – CLiown 2009-09-17 17:04:19