0

プレーヤー、ゲーム、スコアに関する情報を保存する友人 (プロや仕事に関連するものではなく、趣味のようなもの) のために Web サイトを構築しています。ほとんどのレポート/統計情報を作成しましたが、プレーヤーが最大スコアに到達した回数を表示したいと考えており、(サブクエリに基づいて) 自分のアイデアを改善できるかどうか疑問に思っています。私の「スコア」テーブルは次のように設定されています。

スコア (id、gameID、playerID、venueID、vsID、score1、score2、score3、score4、score5、total、seasonID) - すべての xID は外部キーです。

前提は、ゲームごと、プレーヤーごとに新しいエントリが作成されるため、PHP でテキスト フィールドなどからデータを挿入することです。これは、1 シーズンに 20 試合があり、score1 で 'John Smith' が 10 の最大スコアに 4 回達することを意味します。その季節。しかし、彼はまた、score2 で 8 回、score3 で 6 回ヒットします (もちろん、これらは別のゲームで発生する可能性があります)。シーズンの終わりには、大量の結果が入った大きなテーブルがあり (チームごとに 12 人のプレーヤーがいるとすれば、240 行になります)、自分の統計を見ているときに、何人かを知りたいと思います。ジョン・スミスがそのシーズンに10を打った回数。私は明らかに 5 つのクエリ (またはサブクエリを使用して 1 つ) を実行し、結果を追加してこれを伝えることができますが、純粋に私自身の開発。

最後に: クエリを実行して結果セットを取得したいと考えています:

Name       | Total
John Smith | 12
Rob Smith  | 11
Will Smith | 11

など... | 1

firstName と secondName は、'player' テーブル (playerID 外部キーによって 'scores' テーブルにリンクされています) に格納されます。必要に応じて、後でオンデマンドでクエリを変更できるようにしたいと思います。たとえば、プレーヤーが 10 ではなく 9 を獲得した回数を確認したい場合です (ただし、PHP を介して数値を渡すことで明らかに実行できます)。 )。

ここ(+ Google)で検索すると、「JOIN」ルートにたどり着きましたが、あまり成功していません。何か助けてください。:)

4

2 に答える 2

0

This will get the playerID with respective number of 10 scores:

select 
    playerID,
    count(score1 = 10 or null) +
    count(score2 = 10 or null) +
    count(score3 = 10 or null) +
    count(score4 = 10 or null) +
    count(score5 = 10 or null)
    as total
from scores
group by playerID
having total > 0

Join it to the player table to get the names.

于 2012-09-17T19:14:33.473 に答える
0

これでうまくいくはずだと思います:

SELECT playerID, COUNT(playerID) AS Total FROM (
SELECT playerID FROM scores WHERE score1='10' 
UNION ALL
SELECT playerID FROM scores WHERE score2='10'
UNION ALL
SELECT playerID FROM scores WHERE score3='10'
UNION ALL
SELECT playerID FROM scores WHERE score4='10'
UNION ALL
SELECT playerID FROM scores WHERE score5='10'
) AS thetable
GROUP BY playerID

10 は、必要なスコアです。

于 2012-09-17T15:12:28.010 に答える