我想搜索活动会话超过100的终端,我使用的表是terminal_server_log,因为每个终端都有很多日志,我必须确保“timestamp”是最新的。我尝试了两种搜索方式。请注意,对于每个终端,最新的时间戳都不相同。
$termquery=mysql_query("select distinct(terminal) from
terminal_server_log where activesession > 100
group by terminal order by timestamp limit 1");
while($termres=mysql_fetch_array($termquery)){
$terms=$termres["terminal"];
array_push($result, array(
"terminal" => array(
"type" => "resource",
"searchvector" => "/tsmon-dev/api/terminal.php?username=$terms",
"displayvalue" => $terms
)
)
);
}
echo (json_encode($result));
然而,它不起作用。问题是什么?谢谢!
答案 0 :(得分:1)
如果您希望使用activesession > 100
获取所有终端,那么使用limit 1
无意义
select terminal, max(timestamp) from terminal_server_log where activesession > 100 group by terminal
它将返回对[终端,时间戳]的终端只有activesession> 100,并且每条记录的时间戳都是最新的。
如果你想获得一个带有activesession的终端> 100带有最新记录,查询将是:
select terminal from terminal_server_log where activesession > 100 order by timestamp desc limit 1
是的,
请注意,自PHP 5.5起,不推荐使用mysql_构造函数 // Obsidian Age在评论中建议。
<强>已更新强>
其实我只想知道目前的情况:哪个终端 活动会话超过100.我的意思是,对于每个终端,都有 很多记录,如果这个终端的最新记录是活跃的 会话超过100,然后我选择它
SELECT a.terminal
FROM terminal_server_log a
inner join
(
SELECT terminal, MAX(timestamp) timestamp
FROM terminal_server_log
group by terminal
) b on (b.terminal=a.terminal and a.timestamp=b.timestamp)
WHERE a.activesession>100