关于sql查询php

时间:2017-07-30 23:05:29

标签: php mysql sql

我想搜索活动会话超过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)); 

然而,它不起作用。问题是什么?谢谢!

1 个答案:

答案 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