私はテーブルにスコアを格納する2人のゲームを持っています。MySQLテーブルを同じ重要度の2列で注文する
Iテーブルからハイスコアを選択したい、これは私の現在のコードである:
SELECT * FROM games ORDER BY GREATEST(player1Score,player2Score) DESC LIMIT 10
問題は、それが2つだけの下であっても、例えば場合、各行の1つのインスタンスが返され上部の行1つのワラント封入でスコア10
私はテーブルにスコアを格納する2人のゲームを持っています。MySQLテーブルを同じ重要度の2列で注文する
Iテーブルからハイスコアを選択したい、これは私の現在のコードである:
SELECT * FROM games ORDER BY GREATEST(player1Score,player2Score) DESC LIMIT 10
問題は、それが2つだけの下であっても、例えば場合、各行の1つのインスタンスが返され上部の行1つのワラント封入でスコア10
使用UNION ALL
:
SELECT col1, col2, col3, player1Score AS score FROM games
UNION ALL
SELECT col1, col2, col3, player2Score AS score FROM games
ORDER BY score DESC
LIMIT 10
また、SELECT *
を使用しないでください。明示的に列をリストします。
パーフェクト、ありがとう! –
(SELECT *, player1Score as score
FROM games
ORDER BY score DESC
LIMIT 10
)
UNION ALL
(SELECT *, player2Score AS score
FROM games
ORDER BY score DESC
LIMIT 10
)
ORDER BY score DESC
LIMIT 10
プレイヤーテーブルと参加テーブルを作成する方がよいでしょう(ユーザーが2人しかいなくても)。次に、あなたがしようとしていることを行うためのクエリを簡単に作成することができます。もちろん、新しいスキーマと一致するように更新/保存関数を変更するには少し時間がかかります。
players
-----
playerId
playerName
joinPlayerGame
-----
joinId
playerId
gameId
games
-----
modify the player score fields to just be 'score'
SELECT g.*, p.playerName FROM players p INNER JOIN joinPlayerGame j ON j.playerId = p.playerId INNER JOIN games g ON g.<whatever your key is> = j.gameId ORDER BY g.score DESC LIMIT 10
私は、幸運を助けることを願っています!
テーブルには何行ありますか?あなたはパフォーマンスについて心配する必要がありますか? 'player1Score'や' player2Score'にインデックスがありますか? –