2012-07-29 105 views
0

Im在挪威编码基于文本的黑手党游戏,需要时间检测帮助。这就是交易。如果玩家购买产品的时间超过午夜(24小时制),则可以删除mysql记录。这是我试过的,但不确定这是最好的方法:如何检测时间已过午夜?

// Har livvakt? (Has bodyguard) 
if($this->isTheftProtected($user_id)){ 
    $sql = mysql_query("SELECT * FROM `UserTing` WHERE t_meta = '2' AND t_owner = '".$user_id."'"); 
    $rows = mysql_fetch_array($sql); 

    $timeThen = date("Hi", $rows["t_time"]); 
    $theNow = date("Hi"); 

    if($timeThen > 0000){ 
    // Slett produktet <- Delete here... past midnight. 
    } else { 
    // Behold. 
    } 
} else { 
    return; 
} 

那么,有没有更好的方法。是否应该考虑使用时间()?它真的如何做到这一点,我的问题是。 此致敬礼。 ;)

+4

除了一个每一天的毫秒正好在24:00:00 *是*过去午夜。你将需要让你的问题更具体。 – 2012-07-29 05:25:36

回答

1

您可能需要添加cronjob或只在SELECT之前运行此查询以删除旧记录。

DELETE FROM `t1` WHERE DATE(`created`) < CURDATE(); 

JOINS也可用于...

+0

他可以做到这一点,但他可能想通过让球员更新24小时得分来降低开销。 – Raiden 2012-07-29 05:59:40

+0

在这种情况下,UPDATE或DELETE会消耗更少的CPU数量。更加困难DELETING =更少的行=更快的速度。 – 2012-07-29 06:04:20

+0

所以@罗曼纽扎,这将删除行24小时? ;) – hultberg 2012-07-29 06:07:07

1

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');

返回128885

所以逻辑;

SELECT * FROM UserTing WHERE TIMESTAMPDIFF(SECOND, NOW(), t_time) >= (60 * 60 * 24) AND t_owner = {$user_id}

显示值是比当前时间早24小时,为t_owner。

编辑3:确保您始终使用MySQL与MySQL或PHP进行时间比较。但不是两者,因为两者之间允许有允许的时间差异。 (他们有时可以关闭多达一个小时,没有错误。)

+0

MySQL说,SECONDS存在错误。 ;) – hultberg 2012-07-29 05:49:58

+0

MySQL的版本?我假设你使用MySQL 5? – Raiden 2012-07-29 05:56:19

+0

我在切诺基web服务器(ubuntu)上有“libmysql - 5.5.24”。 – hultberg 2012-07-29 05:58:27