MySQL在X时间之后选择带有时间戳的条目

Bol*_*ead 2 php mysql sql

我试图在服务器时间的最后X秒内填充记录列表.

我目前的疑问是......

mysql_query("SELECT player.name FROM player, spectate WHERE (player.pid = spectate.player) && spectate.bid=$bid");
Run Code Online (Sandbox Code Playgroud)

这当前用于检索所有条目.我的第一个想法是选择时间字段.然后使用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.=']';
}
Run Code Online (Sandbox Code Playgroud)

函数UPDATE或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')");
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,欢迎任何其他建议/评论=)


更新:

Spectate表条目示例.
出价:169名
球员:1
次:2009-10-20 21:22:54

玩家表条目示例:
pid:1
uid:1
名称:SpikeAi
得分:2000
胜:0
输:0
领带:0

med*_*iev 5

这应该在最后一分钟内抓取行:

SELECT

time

FROM

games

WHERE

`time` > DATE_SUB( NOW(), INTERVAL 1 MINUTE )
Run Code Online (Sandbox Code Playgroud)

timestamp列类型似乎对我有用.我认为你不一定需要在PHP中生成时间,因为它应该在MySQL中同时假设它在同一台服务器上.

编辑:这个更紧凑......

SELECT * FROM games

WHERE

time > now() - INTERVAL 1 MINUTE
Run Code Online (Sandbox Code Playgroud)