2009-10-22 43 views
2

我正在嘗試在服務器時間的最後X秒內填充記錄列表。MySQL在X時間後選擇帶時間戳的條目

我當前的查詢是..

mysql_query("SELECT player.name FROM player, spectate WHERE (player.pid = spectate.player) && spectate.bid=$bid"); 

這個工程目前檢索所有條目。我的第一個想法是選擇時間字段。然後使用mktime()函數查找與當前服務器時間的時差,並且僅打印差異較小的記錄。

但我認爲包括 WHERE($ x> $ servertime - spectate.time + 1)以及我的其他陳述會更有效。

它不工作,因爲我現在做我做錯了什麼?

功能與SELECT

function spectateJSON() 
{ 
     $servertime = date("Y-m-d H:i:s"); 

     global $json, $bid; 
     $specResult = mysql_query("SELECT player.name FROM player, spectate WHERE (player.pid = spectate.player) && spectate.bid=$bid && (20 > $servertime - spectate.time + 1)"); 
     $specResultCount=mysql_num_rows($specResult); 
     $json.= '"spectate":['; 
     for($i=0; $i<$specResultCount; $i++) 
     { 
      $spectatorName=mysql_result($specResult,$i,"name"); 
      $json.='"'.$spectatorName.'"'; 
      if($i+1 != $specResultCount)$json.=","; 
     } 
     $json.=']'; 
} 

與更新功能或INSERT

if(isset($_SESSION['char'])) 
{ 
    $charId = $_SESSION['char']; 
    $bid = $_GET['bid']; 
    $servertime = date("Y-m-d H:i:s"); 

    $specResult = mysql_query("SELECT player FROM spectate WHERE player='$charId'"); 
    $specResultCount=mysql_num_rows($specResult); 

    if($specResultCount > 0) 
    { 
     $Query=("UPDATE spectate SET bid='$bid' time='$servertime' WHERE player='$charId'"); 
     mysql_query($Query); 
    } 
    else 
    { 
     mysql_query("INSERT INTO spectate (bid, player, time) VALUES ('$bid','$charId','$servertime')"); 
    } 
} 

感謝您的幫助,任何其他建議/批評是值得歡迎的,以及=)


更新:

觀看錶輸入示例。
出價:169
球員:1
時間:2009-10-20 21點22分54秒

播放器表條目例如:
PID:1
UID:1
名稱:SpikeAi
成績:2000
勝:0
輸:0
領帶:0

+0

你能給與推測時間或完全生成的SQL語句的樣本行條目? – 2009-10-22 04:38:47

+0

好吧,我更新後顯示與示例數據依賴表字段。 – 2009-10-22 04:48:18

回答

5

這最後一分鐘內應該抓住行:

SELECT 

time 

FROM 

games 

WHERE 

`time` > DATE_SUB(NOW(), INTERVAL 1 MINUTE) 

在一個timestamp列類型似乎爲我工作。我認爲你不一定需要在PHP中生成時間,因爲它應該與MySQL同時假設它在同一臺服務器上。

編輯:這是一個更緊湊...

SELECT * FROM games 

WHERE 

time > now() - INTERVAL 1 MINUTE