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