2013-10-25 29 views
0

(PHP中的SQL查询)sql查询从每个玩家选择最佳结果?

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

我希望查询生产只为每个玩家(分贝对每个球员的几个结果)最好的结果列表。

它正常工作,除了我得到的最好的结果为每个玩家点,但不是最好的时间排序,然后也反映在排序的SQL

的一部分。例如,如果约翰有以下结果

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 

这是约翰用最少的时间得分最好的结果。我想"ORDER BY points Desc, time Asc"会负责这一点。

看来,GROUP BY放入点的最佳结果,先不管时间

任何想法?

回答

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"; 
+0

哇,我用Google搜索,发现有类似的加盟查询字符串,这些是远远高于我级别,真是令人困惑。例如,我不知道res_max的来源,以及为什么min(r.'time')用引号或为什么“结果r”?导致en错误。希望有一个更简单的方法。谢谢 – MarkBaldou

+0

res_max是派生表的名称:'(从结果中选择codeplayer,max(points)作为点)res_max'。我把反引号放在一段时间,以免它与mysql TIME方法冲突。你可能会尝试删除它们(我甚至不知道是否有列称为时间,并且无论如何你都需要提供表格结构(字段名称和类型)以获得更好的答案)。 – Ashalynd