SQL查询从每个玩家中选择最高结果?

时间:2013-10-25 16:47:58

标签: php sql

(PHP中的SQL查询)

$sqlAS = "SELECT * FROM  results, players WHERE results.codeplayer=players.codeplayer GROUP BY results.codeplayer ORDER BY points Desc, time Asc ";

我希望查询生成一个列表,每个玩家只有最好的结果(每个玩家的数据库都有几个结果)。

它工作得很好,除了我得到每个玩家得分的最佳结果,但没有按最佳时间排序,如SQL的SORT BY部分所反映

例如,如果John有以下结果

400 points 5:00 time   // in minutes
400 points 4:00 time
500 points 5:00 time
500 points 4:00 time
300 points 2:00 time

我得到了

John - 500 points - 5:00 

但我需要

 John - 500 - 4:00 

对于John来说,这是最好的结果。

我猜测"ORDER BY points Desc, time Asc"会负责这一点。

似乎GROUP BY无论时间如何都将最佳结果放在点数

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

试试这个(假设你的列有这样的名字,因为你没有提供你的表结构):

    $sqlAS = "SELECT p.*, r.codeplayer, r.points, min(r.`time`) 
FROM  results r JOIN players p ON r.codeplayer=p.codeplayer 
JOIN (select codeplayer, max(points) as points from results) res_max 
on (res_max.codeplayer = r.codeplayer AND res_max.points = r.points) 
GROUP BY r.codeplayer";