2015-01-20 41 views
0

我有一个表,它看起来像下面获得前5个记录每一个“组”的

pid  server    time  day 
89663 185.x.x.55:27015 463  2015-01-20 
89684 185.x.x.55:27015 29  2015-01-20 
61102 185.x.x.55:27015 309  2015-01-20 
5748 185.x.x.55:27015 684  2015-01-20 
317  79.x.x.40:27018  2410 2015-01-20 
54499 79.x.x.40:27018  12921 2015-01-20 
27176 80.x.x.12:27019  6711 2015-01-20 
81564 80.x.x.12:27019  1095 2015-01-20 
25628 185.x.x.55:27015 161  2015-01-20 

PID是玩家ID,时间以秒为单位

我想打一个查询,显示了如何每台服务器的前5名玩家花费很多时间。我写了一个查询这样做:

SELECT `name`, `time` 
FROM (
    SELECT `pid`, SUM(`time`) AS `time` 
    FROM `stats_general` 
    WHERE `server` = '{$ip}' 
    AND `day` LIKE CONCAT(DATE_FORMAT(NOW(),'%Y-%m-'),'%') 
    GROUP BY `pid` 
    ORDER BY `time` DESC 
    LIMIT 0,5 
) AS g 
JOIN `stats_players` AS p ON g.pid = p.id 

不幸的是,这个查询有一个坏的一面。它仅显示了一台服务器的前5名。我想查询显示每台服务器的前5(我不想使用UNION,它会导致脚本执行很长时间。)

总结。我想要一个查询,显示前5(时间花在服务器上每个服务器的当前月)

回答

0

窝在另一您查询获取IP地址。

SELECT `server` FROM `stats_general` WHERE 1 GROUP BY `server`