我正在爲我正在玩的遊戲的社區開發一款「足球運動員評估」工具。 玩家信息的獲取方式如下(玩家名字,守門員得分,後衛得分,中場得分,進攻得分)。選擇前11位,共同組成MySQL中最高的綜合得分?
(爲了簡單起見,本top4的 「團隊」 組合僅由1守門員,1閃避,1月中旬,1個ATT的。)
+------+--------+-----------+-----------+----------+
| name | Keeper | Defender | Midfielder| Attacker |
+------+--------+-----------+-----------+----------+
| John | *7.2* | 6.1 | 7.1 | 3.4 |
| Rick | 1.9 | 9.0 | *9.2* | 5.3 |
| Fred | 3.2 | 6.8 | 2.1 | 6.4 |
| Mike | 2.1 | *8.9* | 8.7 | 1.2 |
| John | 1.7 | 3.1 | 7.7 | 7.1 |
| Doe | 4.2 | 8.9 | 8.1 | *7.9* |
+------+--------+-----------+-----------+---------+
Team combination with highest total score: John (keeper), Mike (defender), Rick (mid), Doe (att)
Total score: 7.2 + 8.9 + 9.2 + 7.9
比方說,用戶輸入的信息用於20名球員,他想知道11個球員應該踢什麼位置,以及在哪個位置(應該有4名後衛,4名中場球員和2名攻擊者)。 合計得分越高越好。所以通過使用SQL,我想查詢11個最佳球員的數據庫,這些數據一起彌補了最高分。
我知道這可能不適用於只有一個查詢,但沒關係。我無法想出一個辦法來做到這一點,而不必像20個查詢那樣做,並逐個比較總分數。
這是我到目前爲止嘗試過的。
嘗試1: 4不同的查詢,一個用於每個位置(門將,後衛,等等)
SELECT name,midfielder_score FROM players WHERE id NOT IN (" . implode(',', $alreadyUsedPlayers) . ") ORDER BY midfielder_score DESC LIMIT 4
要獲得4級最好的中場。這種方法的問題在於,如果在這個階段(當選擇中場球員時)沒有選擇好的球員,那麼總得分可能會增加,而是留給攻擊者選擇。
嘗試2: 結合GRUOP BY與和
SELECT name, SUM(keeper_score) AS totalKeeperScore [...] FROM players GROUP BY name ORDER BY totalKeeperSCore DESC LIMIT 11
但我意識到,這也必須與多個查詢,並且通過比較來完成。
任何想法如何解決這個問題? 謝謝。
如果明白這個正確的,那麼裏克,而不是麥克,是收視率最高的後衛。 – BlackHatSamurai
單獨是,但考慮這裏重要的是總體總分。通過不選擇瑞克作爲防守隊員,總得分爲0.1。 – Jonathan
總分0.6,我的意思是。看看爲什麼在下面的例子: 裏克後衛:7.2 + 9.0 + 8.7 + 7.9 = 32.8 邁克後衛:7.2 + 8.9 + 9.2 + 7.9 = 33.2 – Jonathan