0

私の注文には多くの計算が必要であることは承知していますが、挑戦として見ていただければ幸いです。

matchup次のような名前のテーブルがあります。

注: 各列 (を除くplayers) のデータ型はdecimal(5,2)

+------------------------------------------------------------------+
|players    player1 player2 player3 player4 player5 player6 player7|
+------------------------------------------------------------------+
|player1    NULL    47.01   52.22   47.59   47.79   43.67   47.61  |
|player2    51.34   NULL    51.76   49.29   48.22   44.46   48.16  |
|player3    46.00   46.33   NULL    41.90   40.46   41.17   39.66  |
|player4    50.34   48.39   55.65   NULL    50.47   44.89   48.48  |
|player5    50.23   49.25   56.76   46.76   NULL    47.27   47.61  |
|player6    54.96   53.77   56.92   53.33   51.36   NULL    49.07  |
|player7    51.03   50.00   58.12   49.12   50.20   48.55   NULL   |
+------------------------------------------------------------------+

この表は、他のプレイヤーに対する各プレイヤーの確率 (%) を示しています。テーブルは次のように読む必要があります。たとえば、プレイヤー 1 がプレイヤー 2 に勝つ確率は 47.01% です。プレーヤーが自分自身と対戦する確率はここでは意味がなく、オッズを計算するときはそのデータを除外する必要があります。

あなたがチームのマネージャーであり、対戦相手のチームが1 人から 5 人のプレーヤーで構成されることを知っているとします。プレーヤーの名前は、次の変数$a$b$c$dで与えられます$e。たとえば、$a='player2'; $b='player4'; $c='player7'(この場合、対戦相手のチームには 3 人のプレイヤーしかいません)。

この情報を基に、敵チームと対戦するのに最適なプレイヤーを決定し、相手チームに勝つチャンスを与えることが目標です。

この例では、各プレイヤーが対戦相手チームに勝つ確率は次のように与えられます。

player1 = mean(47.01; 47.59; 47.61) = 47.40
player2 = cannot be chosen (because it is already chosen by the other team)
player3 = mean(46.33; 41.90; 39.66) = 42.63
player4 = cannot be chosen
player5 = mean(49.25; 46.74; 47.71) = 47.87
player6 = mean(53.77; 53.33; 49.07) = 52.06
player7 = cannot be chosen

この結果は、値が降順の連想配列として事前設定されている必要があります。

$result = array(
'player6' => '52.06',
'player5' => '47.87',
'player1' => '47.40',
'player3' => '42.63'
);

このテーブルは単なる抜粋であることに注意してください。コードでは、テーブルに 7 人以上のプレイヤーが参加する可能性があることを考慮する必要があります。

どんな助けでも感謝します!

4

1 に答える 1

0

テーブル構造を次のように変更します

テーブル プレーヤー:
PlayerID
PlayerName
...

テーブル チーム:
TeamID
TeamName
...

表 TeamMembership
TeamID
PlayerID

テーブル確率
Player1ID
Player2ID
Probability1Beats2

次に、例のようにチーム ID 1 がプレーヤー ID 2、4、および 7 で構成されていると仮定すると、次のようになります。

SELECT Pl.PlayerName, SUM(Pr.Probability1Beats2)/COUNT(DISTINCT(Pr.Player2ID)) AS Avg
FROM (Team T LEFT JOIN TeamMembership M ON T.TeamID = M.TeamID), Probability Pr, Player Pl
WHERE Pr.Player2ID = M.PlayerID
AND M.TeamID = 1
AND Pr.Player1ID NOT IN (
    SELECT PlayerID FROM TeamMembership M2
    WHERE M2.TeamID = 1
) 
AND Pr.Player1ID = Pl.PlayerID
GROUP BY Pr.Player1ID
ORDER BY Avg DESC

クエリはおそらく完璧ではありませんが、手がかりになるはずです。

于 2012-11-05T03:46:56.120 に答える