PHPを使ったmysqlがまだサブクエリを排除しているのかどうかわかりませんが、後でそれをテストします
サブクエリが機能しない場合は、サブクエリのビューを作成してそこから処理を進めることができます。
mysqlが二重引用符("+/-"
)で表されるカラム名をサポートしているかどうかもわかりません
基本的な考え方はホームゲームと訪問ゲームのためにスコアを別々に選んでください。集約関数では、通常、それらの中にcase文を入れて少し魔法を使うことができます。
SELECT
player,
SUM(M) M,
SUM(W) W,
SUM(E) E,
SUM(D) D,
SUM("+") "+",
SUM("-") "-",
SUM("+/-") "+/-",
SUM(Pnts) Pnts
FROM (
SELECT
player1ID player,
count(*) M,
SUM(case when ScorePlayer1 > ScorePlayer2 then 1 end) W,
SUM(case when ScorePLayer1 < ScorePlayer2 then 1 end) E,
SUM(case when ScorePlayer1 = ScorePlayer2 then 1 end) D
SUM(ScorePlayer1) "+",
SUM(ScorePlayer2) "-",
SUM(ScorePlayer1) - SUM(ScorePlayer2) "+/-",
SUM(case when ScorePlayer1 > ScorePlayer2 then 1 end) * 3 +
SUM(case when ScorePLayer1 < ScorePlayer2 then 1 end) Pnts
FROM
someTable
GROUP BY
player1ID
UNION ALL
SELECT
player2ID player,
count(*) M,
SUM(case when ScorePlayer2 > ScorePlayer1 then 1 end) W,
SUM(case when ScorePLayer2 < ScorePlayer1 then 1 end) E,
SUM(case when ScorePlayer2 = ScorePlayer1 then 1 end) D
SUM(ScorePlayer2) "+",
SUM(ScorePlayer1) "-",
SUM(ScorePlayer2) - SUM(ScorePlayer1) "+/-",
SUM(case when ScorePlayer2 > ScorePlayer1 then 1 end) * 3 +
SUM(case when ScorePLayer2 < ScorePlayer1 then 1 end) Pnts
FROM
someTable
GROUP BY
player2Id
) scoresheet
ORDER BY
Pnts desc,
M asc,
"+/-" desc,
"+" desc,
"-" asc
編集:結果を注文するのを忘れました。もしあなたが同点の場合に結果を並べるために、プレイヤーAとBの間のマッチを使いたいなら、ちょっとした魔法が必要です。
サンプル*入力*データを追加できますか?これまでに何を試みましたか? – gbn
誰もが1つのクエリでそのテーブルを生成することができますいくつかの神のような力を持っている必要があります... :) –
あなたはまた、あなたが使用しているクエリを書くことができますか? – Kangkan