次の列を持つテーブルがあります: match_id、player_slot、能力、レベル
試合ごとに 10 人のプレイヤー スロットがあり、各ヒーローは最大 25 のレベルと 5 つの能力のいずれかを持つことができます。API からデータをプルしていますが、プルを高速にする必要があるため、テーブルの設定方法にあまり柔軟性がありません。
ただし、データを表示するために、既存のテーブル形式を実行可能なものに変えるのに本当に苦労しています。試合ごとに、データを次のように配置したいと思います。
プレーヤー スロット 1、レベル 1 の能力、レベル 2 の能力、...、レベル 16 の能力
...
プレーヤー スロット 10、レベル 1 の能力、レベル 2 の能力、...、レベル 16 の能力
実際の例 (ここに例があります) を取得できますが、それは本当に醜いクエリです。行ごとに 15 個のネストされたサブクエリがあり、UNION を実行して 10 行のそれぞれを結合します。
クエリのスニペット:
SELECT player_slot, ability,
(SELECT ability FROM api_abilities WHERE match_id = 119009486 AND player_slot = 1 AND level = 2 ),
...
(SELECT ability FROM api_abilities WHERE match_id = 119009486 AND player_slot = 1 AND level = 16 )
FROM api_abilities
WHERE match_id = 119009486 AND player_slot = 1 AND level = 1
これを単純化するにはどうすればよいですか?このデータを別の方法で表示するビューまたは新しいテーブルを作成する必要がありますか? また、これを複雑にしているのは、各プレイヤーが異なるレベルでゲームを終了することです。私が今持っているものは機能しますが、クエリを実行するためのより効率的な方法が必要なようです。いくつかの異なることを試しましたが、他のクエリで行の統合を正しく取得できないようです。