0

PHPスクリプトでこんにちは、次のMySQLクエリがあります

$query_players = "SELECT (current_timestamp -`Online_since`) AS `Since` FROM `streams` WHERE `Team` = $temp AND `Online` = 1 ORDER BY `Viewers` DESC";

で、〜がある:

$since = round($obj_players->Since /3600);

おそらく想像できると思いますが、$since にはプレイヤーが既にオンラインになっている時間を時間単位で含める必要があります。奇妙なことに、それは間違った結果をもたらします。MySQL では時間が速くなるようです :P たとえば、約 15 分後に「1 時間からオンライン」と表示され、さらに約 30 分後にはすでに 2 時間と表示されます。

誰が何が間違っている可能性があるか知っていますか? たぶん current_timestamps が問題ですか?

4

2 に答える 2

2

current_timestamp実際には秒単位では測定されません。したがって、差を 3600 で割っても時間は得られませんが、任意の値になります。

18分後の違い1800round(1800/3600) = round(0.5)もちろん1です。

実際の列のタイプに応じて、計算にtimediff()またはtimestampdiff()を使用します。

于 2012-12-25T20:32:54.897 に答える
1

TIMESTAMPDIFF を使用してみてください:

$query_players = "SELECT TIMESTAMPDIFF(HOUR, NOW(), `Online_since`) AS `Since` 
                  FROM   `streams` 
                  WHERE  `Team` = $temp 
                  AND    `Online` = 1 
                  ORDER BY `Viewers` DESC";
于 2012-12-25T20:26:03.977 に答える