2017-05-14 4 views
-1

の平均スコアを計算する必要があります。プレイヤーの最新の3得点(ゴルフラウンド)です。コード/構文に関して重要な場合は、最低3つのスコアが必要な場合にのみ必要です。新しいスコアがデータベースに入力されるとmysqlは3つの最新のスコアを選択してから平均を返します

round_id 
player_id 
score 
round_date 

、私はトラックと、通知を維持したいと思います:

私は、これらのフィールドを持つビューを持っています。私は自分のオプションがデータベース内に(何とか)これを保持するか、同等の処理を行うための適切なPHPコードを生成すると考えました。しかし、データベース自体の中に保持することを考えれば、新しいデータの挿入/更新をよりうまく処理できます。 PHPには、実行するためにロードする必要があるページがあります。

ネストされたselect文のいくつかの例を見てきましたが、mysql変数(私の基本的なSQLスキル、実際には変数に入っていないので説明が必要です)を持つものもあります。私の特定のニーズに直接関係するものはありません。

おかげ

+2

これは、基本的な仕様です。私たちは無料のコーディングリソースではありません。あなたが研究をして、行っても、それを完全に正しいものにすることができなければ、私たちは喜んで助けてくれるでしょう。 – RiggsFolly

+2

トップ3の得点の取得方法については、http://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-by-to-n-results-per-groupを参照してください。これをサブクエリに入れ、メインクエリで 'AVG()'を使用して平均値を取得します。 – Barmar

+0

@Barmar find_in_setは実際には私が見るところではここには当てはまりません – ysth

答えて

0

(未テスト)このような何か:

select player_id, avg(substring_index(substring_index(scores,',',round),',',-1)) 
from 
(
    select 1 round union all select 2 union all select 3 
) last_rounds 
cross join 
(
    select player_id, group_concat(score order by round_date desc) scores 
    from player_round 
    group by player_id 
    having count(*) >= 3 
) player_scores 
group by player_id 
+0

3回目のクエリで3回以上プレイした場所のplayer_idしか見つからないことを修正しましたか?これは特に私が探していたものではありません - 私は最後の3ラウンドのみを平均したいと思いますが、3ラウンドをプレイしなければなりません。 –

+0

いいえ、それは3つ以上、3つ以下と言いますが、その行を削除することはできますが、1回または2回しかプレイしていないプレイヤーも得ます。 – ysth

+0

@jingo_manはこれをうまく利用できませんでしたか? – ysth

関連する問題