2013-10-25 99 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