MySQL Select X zaman sonra zaman damgası ile girişleri

1 Cevap php

Ben sunucu zaman son X saniye içinde kayıtların bir listesini doldurmak için çalışılıyor.

Benim geçerli sorgu ..

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

Bu, tüm girdileri almak için şu anda çalışıyor. Benim ilk düşünce de zaman alanını seçmek oldu. Ve sonra geçerli sunucu zaman zaman farkını bulmak için mktime () işlevini kullandığınızda, ve küçük bir fark ile sadece baskı kayıtları.

But I figured that it would be more effective to include WHERE ($x > $servertime - spectate.time + 1) along with my other statements.

Ben şimdi ben yanlış ne yapıyorum gibi işe yaramazsa?

Function with 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.=']';
}

function with UPDATE or 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')");
	}
}

Yardımlarınız için teşekkürler, başka herhangi bir öneri / eleştiri de açığız =)


Update:

Spectate table entry example.
bid: 169
player: 1
time: 2009-10-20 21:22:54

Player table entry example:
pid: 1
uid: 1
name: SpikeAi
score: 2000
wins: 0
lose: 0
tie: 0

1 Cevap

Bu son dakika içinde satırları kapmak gerekir:

SELECT

time

FROM

games

WHERE

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

Bir timestamp sütun türüne iş için beni görünüyordu. Ben o aynı sunucuda bulunuyor varsayarak MySQL aynı zaman olması gerektiği gibi mutlaka PHP süresi oluşturmak için gerek olduğunu düşünmüyorum.

Düzenleme: Bu bir daha kompakt ...

SELECT * FROM games

WHERE

time > now() - INTERVAL 1 MINUTE