我目前正在研究一個足球網站,並且我正在開發的一項功能可以追溯歷史記錄,以查看哪個球員每年進球數最多。ORDER BY MAX(`field_name`)使用GROUP BY
我有一個工作解決方案,但認爲會有一個更簡單和有效的方法去實現它。
下面是一些示例數據:
-----------------------
year | name | goals
-----------------------
1 | player1 | 6
1 | player2 | 8
1 | player3 | 4
2 | player1 | 3
2 | player2 | 5
2 | player3 | 2
3 | player1 | 7
3 | player2 | 7
3 | player3 | 3
使用下面的查詢,我能找回我所需要的數據的一部分。
SELECT
year
,MAX(goals
)ASgoals
FROMtable
GROUP BY`一年
------------
year | goals
------------
1 | 8
2 | 5
3 | 7
檢索從name
列正確的值被證明更加困難雖然,因爲我不得不使用GROUP_CONCAT
在例如3年的情況下,其中多於一個的name
等於最大值goals
。
目前,我正在使用兩個查詢來獲得我想要的結果。我仍在使用上面的查詢,但隨後使用PHP while循環單獨搜索每年。
這裏是我的代碼:
$load_goals = $db->query("SELECT `year`, MAX(`goals`) AS `goals` FROM `table` GROUP BY `year` DESC);
while($goals = $load_goals->fetchObject())
{
$players = $db->prepare("SELECT `year`, GROUP_CONCAT(`name` ORDER BY `name`) AS `name`, `goals` FROM `table` WHERE `year` = :year AND `goals` = :goals");
}
我一直在努力,這兩個查詢合併爲一個,但無濟於事,所以這裏的任何指導,將不勝感激。
爲了澄清,這應該是我的最終結果。請注意在第3年發生了什麼,其中GROUP_CONCAT
已送達。
------------------------------
year | name | goals
------------------------------
1 | player2 | 8
2 | player2 | 5
3 | player1,player2 | 7
你看到缺少的雙引號嗎?語法着色應該給你提示! – RiggsFolly
這裏的任何明顯的語法錯誤純粹取決於我對網站的新手和適應代碼和報價系統。 我已被提供以下答案現在解決我的問題。感謝您的答覆。 –